У кого-нибудь есть реальный опыт CSLA?

Основное веб-приложение моей компании требует отличного набора библиотек, чтобы его можно было поддерживать и масштабировать, и один из моих коллег предложил CSLA. Итак, я купил книгу, но как:

программисты больше не читают книги

Я хотел оценить мнение сообщества SOFlow об этом.

Итак, вот мои вопросы:

  1. Как люди могут использовать CSLA?
  2. Каковы плюсы и минусы?
  3. CSLA действительно не вписывается в TDD?
  4. Каковы мои альтернативы?
  5. Если вы перестали его использовать или решили против чего?
18.08.2008 21:23:50
23 ОТВЕТА
РЕШЕНИЕ

Прежде чем я конкретно отвечу на ваш вопрос, я хотел бы изложить несколько соображений. Подходит ли CSLA для вашего проекта? По-разному. Я бы лично рассматривал CSLA для настольных приложений, которые не считают модульное тестирование высоким приоритетом. CSLA отлично подходит, если вы хотите легко масштабировать приложение до уровня n. CSLA имеет тенденцию испытывать некоторое недовольство, потому что не допускает чистого модульного тестирования. Это правда, однако, как и все в технологии, я считаю, что нет единого истинного пути . Модульное тестирование не может быть чем-то, что вы предпринимаете для конкретного проекта. То, что работает для одной команды и одного проекта, может не работать для другой команды или другого проекта.

Есть также много заблуждений в отношении CSLA. Это не ORM. он не является конкурентом NHibernate (фактически используя CLSA Business Objects и NHibernate, поскольку доступ к данным действительно хорошо сочетается). Это формализует концепцию мобильного объекта .

1. Сколько людей используют CSLA?
Основываясь на форумах CSLA , я бы сказал, что существует довольно много проектов, основанных на CSLA. Честно говоря, я понятия не имею, сколько людей на самом деле используют его. Я использовал его в прошлом на двух проектах.

2. Какие плюсы и минусы?
Хотя в кратком списке трудно подвести итог, вот некоторые из доводов за / против, которые приходят на ум.
Плюсы:

  • Легко получить новых разработчиков в скорости. Книга и пример приложения CSLA - это отличные ресурсы для быстрого освоения.
  • Платформа валидации действительно мирового класса - и была «заимствована» для многих других не связанных с CSLA проектов и технологий.
  • Отмена n-уровня в ваших бизнес-объектах
  • Изменение строки конфигурации для масштабируемости n-уровня (Примечание: даже перекомпиляция не требуется)
  • Ключевые технологии абстрагированы от «реального» кода. Когда WCF был представлен, он оказал минимальное влияние на код CSLA.
  • Можно делиться своими бизнес-объектами между окнами и веб-проектами.
  • CSLA способствует нормализации поведения, а не нормализации данных (оставляя базу данных для нормализации данных).

Минусы:

  • Сложность в юнит-тестировании
  • Отсутствие разделения интересов (как правило, ваши бизнес-объекты имеют код доступа к данным внутри них).
  • Поскольку CSLA способствует нормализации поведения , а не нормализации данных , и это может привести к тому, что бизнес-объекты будут именоваться аналогично, но имеют разные цели. Это может вызвать некоторую путаницу и ощущение, будто вы не используете объекты должным образом. Тем не менее, после того, как сделан физиологический скачок, это более чем логично - кажется неуместным структурировать объекты «старым» способом.
  • Это не "в моде", чтобы создавать приложения таким образом. Вы можете изо всех сил пытаться получить разработчиков, которые увлечены технологией.

3. После прочтения CSLA действительно не вписывается в TDD?
Я не нашел эффективного способа сделать TDD с CSLA. Тем не менее, я уверен, что есть много более умных людей, чем я, которые могли бы попробовать это с большим успехом.

4. Каковы мои альтернативы?
Domain-Driven-Design в настоящее время получает большой толчок (и это справедливо - это фантастика для некоторых приложений). Существует также ряд интересных шаблонов, которые развиваются с появлением LINQ (и LINQ to SQL, Entity Framework и т. Д.). В книге Фаулерса PoEAA подробно описаны многие шаблоны, которые могут подойти для вашего приложения. Обратите внимание, что некоторые шаблоны конкурируют (например, Active Record и Repository) и, таким образом, предназначены для использования в конкретных сценариях. Хотя CSLA не совсем соответствует ни одному из паттернов, описанных в этой книге, она больше всего напоминает Active Record (хотя я чувствую, что недальновидно требовать точного соответствия для этого паттерна).

5. Если вы перестали его использовать или решили против чего?
Я не полностью рекомендовал CSLA для моего последнего проекта, потому что я считаю, что область применения слишком велика для тех преимуществ, которые предоставляет CSLA.
Я бы не использовал CSLA в веб-проекте. Я чувствую, что есть другие технологии, лучше подходящие для создания приложений в этой среде.

Таким образом, хотя CSLA - это не серебряная пуля , она подходит для некоторых сценариев.

Надеюсь это поможет!

72
18.08.2008 22:32:10
Абсолютно не согласен с тем, что «легко освоить новых разработчиков» - по моему опыту, люди сначала находят его очень запутанным, и не сразу очевидно, что дает вам свертка.
Dan 22.07.2009 10:22:00
Отличный ответ. Очень объективно
Seth Spearman 26.01.2010 18:08:57
«Сложность в юнит-тестировании» - как так? «Отсутствие разделения интересов (как правило, ваши бизнес-объекты имеют код доступа к данным внутри»). - Ничто не мешает вам использовать шаблон хранилища вместе с ним. «Поскольку CSLA способствует нормализации поведения, а не нормализации данных, и это может привести к тому, что бизнес-объекты будут иметь одинаковые имена, но для разных целей». Правильно, но цель состоит в том, чтобы избежать тесного соединения классов.
J.C. 12.04.2010 19:05:53
Нет - не легко, если никто в группе не получает его, но если есть ОДНА причина, почему он знает магию при вызове DataPortal, это легко.
Tony Trembath-Drake 22.01.2011 11:07:18
... и я тестировал его как на ядре CSLA, так и с точки зрения пользовательского интерфейса (WPF) - без особых проблем - возможно, установка mokeDB - это сложно, но для любого реального TDD по существу потребуется время.
Tony Trembath-Drake 22.01.2011 11:08:58

Мы начали использовать CSLA, потому что думали, что это поможет с нашим уровнем модели. Это было своего рода излишним, и в основном все, что мы сейчас используем, это класс SmartDate, просто потому, что мы уже связаны с библиотекой.

Мы думали, что интерфейс проверки действительно поможет нам обеспечить соблюдение бизнес-правил, но он плохо работал с WCF и сериализацией (мы все еще застряли на версии 2.0.3.0, поэтому все могло измениться).

6
18.08.2008 21:34:26

У меня был опыт с этим несколько лет назад. Это блестящая архитектура, но очень сложная, трудная для понимания или изменения, и она решает проблему, которая не обязательно возникает у большинства из нас, разрабатывающих веб-приложения. Он был разработан больше для приложений на базе Windows и обработки многоуровневых отмен, с большим акцентом на логику транзакций. Вы, вероятно, услышите, как люди говорят, что, поскольку веб-приложения являются запросом-ответом на уровне страницы, это неуместно, но с веб-приложениями в стиле AJAX этот аргумент может не содержать много воды.

У него очень глубокая объектная модель, и может потребоваться некоторое время, чтобы действительно обернуть вокруг него свой мозг. Конечно, многое может измениться за несколько лет. Мне было бы интересно услышать другие недавние мнения.

Учитывая все обстоятельства, это не будет моим первым выбором архитектуры.

11
18.08.2008 21:48:44
+1. Я пришел в команду с несколькими версиями в очень крупный проект CSLA. Это сложно. Вы должны выбирать CSLA, только если «проблемы, которые он решает» явно перевесит все остальное для вас. Вы были предупреждены. ИМХО отсутствие тестируемости модулей делает CSLA не стартером для критических систем. У нас только около 4% тестового покрытия. CSLA невосприимчив к внедрению зависимостей, и ваш пользовательский код обязательно тесно связан со структурой со всем наследованием и переопределением.
radarbob 11.06.2012 14:45:47

Да, я (гм, мы) широко использовал его для моделирования логики наших бизнес-процессов, которая в основном была формами с привязкой к данным в приложении Windows Forms. Приложение было торговой системой. CSLA предназначен для того, чтобы находиться на этом уровне чуть ниже пользовательского интерфейса.

Если вы думаете о своем стандартном сложном бизнес-приложении, у вас может быть форма со многими полями, множеством правил для этих полей (включая правила проверки между полями), вы можете вызвать модальное диалоговое окно для редактирования некоторого дочернего объекта, вы можете хотите иметь возможность отменить такие диалоги и вернуться к предыдущему состоянию. CSLA поддерживает это.

Минусы в том, что у него есть немного кривой обучения.

Главное, что нужно помнить - это использовать CSLA для моделирования взаимодействия пользователя с формами в каком-либо приложении. Самым эффективным способом для меня было создание пользовательского интерфейса и понимание его потоков, поведения и правил проверки перед созданием объектов CSLA. Не заставляйте свои объекты CSLA управлять дизайном пользовательского интерфейса.

Мы также обнаружили, что очень полезно использовать серверную часть бизнес-объектов CSLA для проверки объектов, отправленных клиентами.

Мы также создали встроенные механизмы для асинхронной проверки по отношению к веб-службе (т. Е. Проверка диапазона кредитного лимита контрагента по отношению к ведущему).

CSLA обеспечивает строгое разделение между вашим пользовательским интерфейсом, BusinessLogic и Persistance, и мы написали множество юнит-тестов против них. Это может быть не строго TDD, потому что вы используете его в дизайне пользовательского интерфейса, это не значит, что он не тестируемый.

Единственная реальная альтернатива - это создание вашей собственной модели \ бизнес-объектов, но довольно скоро вы в конечном итоге реализуете функции, которые CSLA предлагает «из коробки» (INotifyPropertyChanged, IDataErrorInfo, PushState, PopState и т. Д.)

19
18.08.2008 22:50:26

Наша компания практиковала CSLA в некоторых своих проектах, а некоторые из прежних проектов остаются CSLA. Другие проекты отошли от него, потому что CSLA нарушила простое и понятное правило ООП: принцип единой ответственности.

Объекты CSLA являются самодостаточными, например, они извлекают свои собственные данные, они управляют своим собственным поведением, они сохраняют себя. К сожалению, это означало, что ваш средний объект CSLA имеет как минимум три обязанности - представлять модель предметной области, содержать бизнес-правила и содержать определение доступа к данным (не DAL или реализацию доступа к данным, как я ранее указывал / подразумевал), все одновременно. время.

6
22.09.2009 02:57:25
CSLA инкапсулирует всю логику поиска и сохранения себя внутри объекта, но не определяет, КАК это сделано. Вы можете легко иметь DAL, который вызывается объектом CSLA. Назначение методов DataPortal_XYZ - транспортировка объекта по уровням. В прошлый раз я проверил инкапсуляцию очень хорошо.
Darren Kopp 19.08.2008 00:24:01
в то время как у вас есть точка зрения, я нахожу, что тот факт, что у вас есть поведение поиска и персистентности внутри объекта как нарушения SRP (если не OO) как таковые . К сожалению, данный аргумент более религиозен, чем что-либо еще, поэтому я бы согласился не соглашаться с вами.
Jon Limjap 19.08.2008 00:51:54

В защиту CSLA, хотя я согласен со многими комментариями, в частности, с модульным тестированием ...

Моя компания широко использовала его для приложения для ввода данных в Windows Forms, с большим успехом.

  • Это обеспечивало готовую функциональность, которую мы не имели ни времени, ни опыта, чтобы писать сами.
  • Он стандартизировал все наши бизнес-объекты, упрощая обслуживание и сокращая время обучения для наших новых разработчиков.

В целом, я бы сказал, что любые проблемы, которые он вызвал, были более чем перевешены преимуществами.

ОБНОВЛЕНИЕ: В дополнение к этому мы все еще используем его для нашего приложения для форм Windows, но эксперименты с использованием его для других приложений, таких как веб-сайты, показали, что, возможно, это будет громоздким, когда вам не нужно много его функциональности, и мы сейчас изучаем более легкие варианты веса для этих сценариев.

8
23.02.2009 08:56:59
Мы делаем что-то похожее, и мне было бы интересно услышать о некоторых вариантах с более легким весом, на которые вы смотрели.
Span 15.02.2011 22:13:30
@Span - Мы используем NHibernate.
Simon Keep 23.02.2011 14:38:03

Я использовал его для проекта пару лет назад. Но когда проект был завершен, я не мог никому рассказать, что CSLA сделал для меня. Конечно, я унаследовал от своих классов. Но мне удалось удалить это наследство практически из всех классов без реструктуризации. У нас не было никакой пользы для вещей N-Tier. Отмена n-уровня была настолько медленной, что мы не могли ее использовать. Так что, думаю, в конце это помогло нам смоделировать наши занятия.

Сказав это, другие команды начали использовать его (после ужасной попытки команды создать свою собственную структуру). Так что там должно быть что-то стоящее, потому что они все умнее меня!

2
23.09.2008 14:16:36

Я хотел использовать его, но мой тогдашний ведущий разработчик думал, что слишком много «магии» было задействовано ...

1
23.09.2008 14:19:23
Он имел в виду «Отражение»?
Johnno Nolan 24.09.2008 13:38:34

Мы используем CSLA уже более пяти лет, и мы считаем, что он отлично работает для создания бизнес-приложений. В сочетании с генерацией кода вы можете создавать бизнес-объекты за относительно короткое время и сосредоточить свои усилия на сути приложения.

4
23.09.2008 14:22:51

Я использовал CSLA для одного проекта, и он отлично работал, и все стало намного проще и аккуратнее.

Вместо того, чтобы ваша команда писала бизнес-объекты в своем собственном личном стиле, у нас есть общий стандарт для работы.

//Энди

13
30.10.2008 11:35:45
Я обнаружил, что это лучший профессионал для этого. Он обеспечивает стандартный дизайн и образ мышления в команде.
DancesWithBamboo 24.11.2008 14:50:33

Мы широко используем CSLA. Есть несколько преимуществ; Во-первых, я полагаю, что каждая отраслевая компания-разработчик должна прочитать книгу Рокки Лотки о программировании бизнес-объектов. Я лично нашел это в моих лучших 3 лучших книгах программирования когда-либо. CSLA - это фреймворк, основанный на этой книге, и его использование дает вашему проекту доступ к очень высокоуровневым функциям, таким как отмена на n-уровне, правилам валидации и архитектуре масштабируемости, предоставляя при этом подробности. Заметьте, я сказал «предоставление», а не «скрытие». Я обнаружил, что лучшая часть CSLA - это то, что вы понимаете, как все эти вещи реализованы вплоть до исходного кода, не заставляя вас воспроизводить их самостоятельно. Вы можете использовать столько функций, сколько вам нужно, но я обнаружил, что, оставаясь верным шаблонам проектирования платформы, это действительно держит вас от неприятностей. --Byron

5
28.01.2009 13:33:45
То же самое о пользе чтения книги. Последнее, что я прочитал, - новая версия (.NET 3.x) книги не должна была включать ту же самую начальную экскурсию по исходному коду, что и версия .NET 2.x. Это позор - я чертовски много узнал об ООП из этой книги. Больше чем любая другая книга, которую я прочитал.
Josh Kodroff 23.07.2009 04:36:16

Я парень из PHP. Когда мы начали создавать сравнительно крупномасштабные приложения на PHP, я начал исследовать множество сред приложений и ORM, в основном в мире PHP, а затем в Java и .NET. Причина, по которой я также посмотрел на фреймворки Java и .NET, заключалась не в том, чтобы слепо использовать какую-либо фреймворк PHP, а вначале, чтобы понять, что на самом деле происходит, и какие существуют архитектуры уровня предприятия.

Поскольку я не использовал CSLA в реальных приложениях, я не могу комментировать его плюсы и минусы, но я могу сказать, что Лхотка - один из тех редких мыслителей, я не говорю, что он просто эксперт в области архитектуры программного обеспечения. Хотя название Domain Driven Design придумано Эриком Эвансом - кстати, его книга также великолепна, и я скромно советую ее прочитать - Лотка годами применял доменный дизайн. Сказав это, что бы вы ни думали о его структуре, извлеките выгоду из его глубоких идей в этой области.

Вы можете найти его доклады на dotnetrocks.com/archives.aspx и видео с dnrtv.com/archives.aspx (поиск Lhotka).

@Byron Какие еще две книги тебе понравились?

2
10.02.2009 04:12:42

Не брать CSLA из списка, но прежде чем использовать его, изучите преимущества и убедитесь, что они действительно применимы. Сможет ли ваша команда правильно / последовательно это реализовать? Remoting и портал танец нужны?

Я думаю, что помимо теоретического размышления, речь идет о чистом / поддерживаемом / расширяемом / тестируемом коде, следуя базовым проверенным шаблонам.

Я посчитал строки кода, необходимые в конкретной области проекта, преобразованной из CSLA. Между всеми различными объектами CSLA (комбинации «только для чтения» + «редактируемый» + «корень» + «список») и их хранимыми процессами потребовалось около 1700 строк по сравнению с реализацией Linq2SQL + Repository, которая заняла 180 строк. Версия Linq2SQL состояла в основном из сгенерированных классов, которые вашей команде не нужно использовать для понимания книги. И да, я использовал CodeSmith для генерации частей CSLA, но теперь я верю в DRY-код с единичными битами ответственности, и реализация CSLA теперь выглядит для меня как вчерашний герой.

В качестве альтернативы я хотел бы предложить рассмотреть Linq2Sql / Entity Framework / NHibernate в сочетании с шаблонами Repository и UnitOfWork. Посмотрите на http://www.codeplex.com/backgroundmotion

Ура!

6
6.04.2009 07:01:39

Джон,

У нас есть команды, работающие в CSLA от 2 до 3,5, и мы обнаружили, что это отличный способ обеспечить согласованную структуру, чтобы все разработчики «делали это одинаково». Хорошо, что большая часть кода с низким значением генерируется, и мы знаем, что когда мы запускаем модульные тесты, они работают «из коробки» для всего, что касается CRUD. Мы находим, что наш TDD действительно приходит с рефакторингом, который мы делаем для проектирования, и CSLA не мешает нам делать все это.

Крис

2
6.05.2009 14:05:59

В последний раз я пытался использовать CSLA в дни каменного века VB6. Оглядываясь назад, было бы более эффективно, если бы я использовал генерацию кода. Если у вас нет эффективных инструментов генерации кода и стратегии для их встраивания в ваш рабочий процесс, вам следует избегать таких фреймворков, как CSLA, в противном случае функции, которые вы получаете от CSLA, не компенсируют количество времени, которое вы тратите на написание n строк. кода на таблицу, n строк кода на столбец и т. д.

2
8.05.2009 10:51:59

Я использую CSLA в качестве структуры бизнес-объекта для проекта среднего размера. Фреймворк прошел долгий путь от дней VB6 и предлагает необычайную гибкость и функциональность «из коробки». Мобильные интеллектуальные объекты CSLA значительно упрощают разработку пользовательского интерфейса. Тем не менее, я согласен с другими, это не правильный инструмент для каждой ситуации. Это определенно связано с некоторыми накладными расходами, но также и с большой мощностью. Лично я с нетерпением жду возможности использовать CSLA Light с Silverlight.

Плюсы:

  • Технология данных агностик 1
  • Большая база установки и это бесплатно!
  • Стабильные и логические рамки
  • Код доступа к данным может быть в ваших объектах или в отдельной сборке
  • Проверка и авторизация имущества и объектов

Cons

  • Код может быть много, чтобы поддерживать 2
  • Вероятно, нужен генератор кода для эффективного использования
  • Кривая обучения. Структуру объектов CSLA легко понять, но предостережения могут вызвать головную боль.


Я не уверен насчет тестового дизайна. Я не занимаюсь модульным тестированием или тестированием, основанным на тестировании (как мне не стыдно), поэтому я не знаю, отличаются ли модульные тесты от TDD, но я знаю, что самая последняя версия инфраструктуры поставляется с модульными тестами.


1 Хорошо, потому что технологии доступа к данным никогда не остаются неизменными надолго.
2 Это стало лучше с последними версиями фреймворка.

3
8.06.2009 04:54:53

Прочитав все ответы, я заметил, что довольно много людей имеют некоторые неправильные представления о CSLA.

Во-первых, CSLA не является ORM . Как я могу сказать это так определенно? Потому что Рокфорд Лхотка сам много раз заявлял об этом в интервью на подкастах .NET Rocks и Hanselminutes . Ищите любой эпизод, где Роки давал интервью, и он изложит это недвусмысленно. Я думаю, что это самый важный факт, который люди могут понять, потому что почти все неправильные представления о CSLA вытекают из веры в то, что это ORM, или попытки использовать его как единое целое.

Как намекал Брэд Лич в своем ответе, объекты CSLA моделируют поведение, хотя, возможно, будет точнее сказать, что они моделируют поведение данных, поскольку данные являются для них неотъемлемыми. CSLA - это не ORM, потому что он абсолютно не зависит от того, как вы общаетесь с вашим хранилищем данных. Вы должны использовать некоторый уровень доступа к данным с CSLA, возможно, даже ORM. (Я делаю. Теперь я использую Entity Framework, который прекрасно работает.)

Теперь перейдем к юнит-тестированию. У меня никогда не было проблем с модульным тестированием моих объектов CSLA, потому что я не помещаю свой код доступа к данным непосредственно в свои бизнес-объекты. Вместо этого я использую некоторые варианты шаблона хранилища. Хранилище используется CSLA, а не наоборот. Поменяв фальшивый репозиторий для моих юнит-тестов и используя локальный портал данных, BOOM! это просто. (Как только Entity Framework разрешит использование POCO, это станет еще чище.)

Все это происходит от осознания того, что CSLA не является ORM. Он может потреблять ORM, но сам по себе он не один.

Приветствия.

ОБНОВИТЬ

Я думал, что сделаю еще несколько комментариев.

Некоторые люди говорят, что CSLA является многословным по сравнению с такими вещами, как LINQ to SQL и так далее. Но здесь мы сравниваем яблоки с апельсинами. LINQ to SQL - это ORM. Он предлагает некоторые вещи , которые CS не делает, и CSLA предлагает некоторые вещи L2S не делает, как интегрированная проверка и п -tier сохранение с помощью различных удаленных порталов данных. На самом деле, я бы сказал , что последняя вещь, п -tier настойчивость, перевешивает их все для меня. Если я хочу использовать Entity Framework или LINQ to SQL по сети, я должен поместить что-то вроде WCF между ними, и это значительно умножит работу и сложность до такой степени, что я думаю, что это намногоболее многословный, чем CSLA. (Теперь я фанат WCF, REST и SOA, но использую его там, где он действительно нужен, например, когда вы хотите предоставить сервис третьим сторонам. Для большинства бизнес-приложений это не так. действительно необходим, и CSLA - лучший выбор.) Фактически, с последней версией CSLA, Rocky предоставляет WCFDataPortal, который я использовал. Работает отлично.

Я фанат SOLID , TDD и других современных принципов разработки программного обеспечения и использую их везде, где это возможно. Но я думаю, что преимущества CSLA перевешивают некоторые возражения этих ортодоксов, и в любом случае мне удалось заставить CSLA довольно хорошо (и легко) работать с TDD, так что это не проблема.

23
3.08.2009 21:57:12
Вы забили много заблуждений прямо в голову! Хорошо сказано!
J.C. 12.04.2010 19:08:27
Хех, это не случайно, что вы также задали вопрос ОРМ, который у меня был прямо в голове. stackoverflow.com/questions/2625098/…
J.C. 13.04.2010 21:49:59
Я перешел из мира MS в мир Mac / Unix, но перед тем как уйти, я обнаружил радость использования CSLA с Dapper в качестве ORM. Использование жирного ORM, такого как EF, хорошо работает, но для CSLA это просто излишне.
Gregory Higley 7.10.2014 18:08:39

Я использовал CSLA.NET в нескольких проектах сейчас, он был наиболее успешным в приложении для форм Windows, которое имеет богатую совместимость с привязкой данных (чего нет у приложения asp.net).

Основная проблема в том, что поддержка TDD, как указывали люди, связана с поведением, аналогичным черному ящику, для функций Dataportal_XYZ, и из-за невозможности насмехаться над объектами данных. Были предприняты усилия, чтобы обойти эту проблему, и это лучший подход

2
17.09.2009 12:44:03
Напечатайте, возможно, ответ на проблемы CSLA с TDD
Johnno Nolan 17.09.2009 13:53:16

CSLA - лучшая из существующих прикладных сред. Rocky LHotka - очень, но очень умный парень. Он пишет историю разработки программного обеспечения, как Мартин Фаулер, Дэвид С. Платт, но мои любимые писатели - Род Стивенс, Мэтью Макдональдс Джефф Левинсон, Теарон Уиллис и Луис Дэвидсон, псевдоним dr sql. :-) Плюсы: все шаблоны дизайна применяются. Минусы: трудно учиться, и несколько образцов.

0
2.03.2010 06:51:27

Я использую CSLA начиная с vb5, когда это была скорее коллекция шаблонов, чем фреймворк. С введением .NET CSLA превратилась в полноценный фреймворк, который шел с большой кривой обучения. Тем не менее, CSLA обращается ко многим вещам, которые все бизнес-разработчики склонны писать в какой-то момент (в зависимости от масштаба проекта): логике валидации, логике аутентификации, отмене функциональности, грязной логике и т. Д. Все эти вещи вы получаете бесплатно из коробка в одной красивой рамке.

Как утверждают другие, будучи фреймворком, он заставляет разработчиков писать бизнес-логику аналогичным образом. Это также вынуждает вас обеспечивать уровень абстракции для вашей бизнес-логики, так что отсутствие использования инфраструктуры пользовательского интерфейса, такого как MVC, MVP, MVVM, становится не столь важным.

На самом деле, я бы сказал, что причина, по которой многие из этих шаблонов пользовательского интерфейса сегодня так широко распространены (в мире Microsoft), заключается в том, что люди так долго делали что-то невероятно неправильное (например, используя DataGrids в своем пользовательском интерфейсе, разбрызгивая твоя бизнес логика везде. тиск тиск). Правильно спроектируйте свой средний уровень (бизнес-логику) с самого начала, вы можете повторно использовать свой средний уровень в ЛЮБОМ пользовательском интерфейсе. Win Form, ASP.NET/MVC, служба WCF, WPF, Silverlight **, служба Windows, ....

Но помимо этого, огромной отдачей для меня стала встроенная способность масштабирования. CSLA использует шаблон прокси, который настраивается через ваш файл конфигурации. Это позволяет вашим бизнес-объектам осуществлять удаленные вызовы с сервера на сервер без необходимости писать один кусок кода. Добавляете больше пользователей в вашу систему? Нет проблем, разверните бизнес-объекты CSLA на новом сервере приложений, измените запись в файле конфигурации и BAM !! Мгновенные потребности в масштабируемости удовлетворены.

Сравните это с использованием DTO, хранением вашей бизнес-логики на клиенте (каким бы клиентом он ни был) и необходимостью писать каждый из ваших собственных методов CRUD в качестве методов обслуживания. YIKES !!! Не сказать, что это плохой подход, но я бы не хотел этого делать. Не тогда, когда есть основа, чтобы сделать это для меня.

Я собираюсь повторить то, что другие люди сказали в том, что CSLA НЕ является ORM. CSLA заставляет вас снабжать ваши бизнес-объекты данными. Им все равно, откуда вы берете свои данные. Вы можете использовать ORM для предоставления вашим бизнес-объектам данных. Вы также можете использовать сырой ADO.NET, другие сервисы (RESTFUl, SOAP), таблицы Excel, я могу продолжать здесь.

Что касается вашей поддержки TDD, я никогда не пытался использовать этот подход с CSLA. Я использовал подход, в котором я моделирую свой средний уровень (аля бизнес-объекты), используя диаграммы классов и последовательностей, чаще всего позволяя диктовать вариант использования, экран и / или дизайн процесса. Возможно, немного старая школа, но UML всегда очень хорошо служил мне в моих усилиях по дизайну и разработке. Я успешно спроектировал и разработал очень большие и масштабируемые приложения, которые до сих пор используются. И до созревания WCF RIA я буду продолжать использовать CSLA ..

** с некоторыми обходными путями

4
5.03.2010 06:09:21

Многие люди рекомендуют использовать генерацию кода с CSLA. Я бы порекомендовал проверить наш набор поддерживаемых шаблонов, поскольку они значительно увеличат ваш ROI.

Спасибо - Блейк Немийски (Автор шаблонов CodeSmith CSLA )

3
5.08.2010 16:11:14

Я новичок в CSLA, но я понимаю концепции и уже понимаю, что это не инструмент ORM, так что перестаньте побеждать этих чертовых барабанщиков. Есть функции CSLA, которые мне нравятся, но их использование немного похоже на то, что за кулисами стоит волшебник. Я думаю, если вы не возражаете, не зная о том, как это работает, тогда вы можете использовать объекты, и они работают нормально.

Существует большая кривая обучения для начинающих, и я думаю, что было бы очень полезно иметь 5-15 минут. видео, подобные Microsoft, для изучения основ. Или как насчет выпуска книги-компаньона с кодом вместо того, чтобы выпускать код, и на то, чтобы выпустить книгу, потребовались месяцы? Просто скажи, мистер Лохтка ... Мы начали создавать наши вещи до книги, и я все время боролся. Но, как я уже сказал, я новичок в этом.

Мы использовали CSLA. Мы привели наши объекты в соответствие с их формой, а затем использовали 10% от того, что предлагали рамки. Уровень объекта отменен? Не использовал это. NTier гибкость? Не использовал это. В итоге мы написали достаточно кода для бизнес-правил, и я думал, что единственное, что мы получим из CSLA - это сложность. Некоторые разработчики «долго в зубе», которые знают основу, использовали ее как молоток, потому что у них был гвоздь, который требовал удара. CSLA была в их поясе, и я предполагаю, что многие сторонники структуры также видят вещи с этой точки зрения.

Я думаю, что наши опытные разработчики счастливы, потому что все это имеет для них смысл. Я думаю, если в вашей организации нет программистов-новичков, а вам, ребята, скучно писать эффективные и простые объекты POCO с хорошо сформированными шаблонами, тогда сделайте это. Используйте CSLA.

4
13.12.2010 23:00:40

Я присоединился к команде, где CSLA является обязательным. Мы не используем удаленный портал данных, и это единственная причина, по которой я мог согласиться на использование этой платформы. Я никогда не увлекался идеей CSLA, поэтому, может быть, поэтому у меня нет ничего, кроме проблем, извините.

Пара вопросов:

Мне не нужен дорожный блок между моим кодом и .NET-фреймворком, как мне и казалось. У меня был ограниченный выбор объектов списка, в то время как мне просто нужно было игнорировать объекты расширенного списка в .NET Framework.

Просто смешно, что у нас были эти списки только для чтения, а затем списки не только для чтения. Так что, если бы мне пришлось добавить элемент в список, я должен был воссоздать весь список ... ты серьезно?

Тогда csla хочет управлять моим состоянием объекта, что нормально, но на самом деле ничего не выставлено. Иногда я хочу изменить состояние объекта вручную, а не извлекать его снова, что похоже на то, что csla хочет от меня. Я, в основном, в конечном итоге создал много свойств для выставления опций, потому что я не думал, что у меня должен быть прямой доступ.

Почему я не могу просто создать экземпляр объекта? В итоге мы создаем статические методы, которые создают экземпляр объекта и возвращают его обратно ... ты шутишь?

Проверьте исходный код фреймворка, и он кажется мне слишком тяжелым для кода отражения.

Причины использовать csla:

  • прямой .net Framework слишком силен для вас.
  • Ваши разработчики не опытны и не могут понять концепцию шаблонов, тогда csla будет в значительной степени иметь всех на одной странице.

    1. Мне не нужен дорожный блок между моим кодом и .NET Framework ... Я застрял с этими объектами списка.
7
22.02.2011 09:07:48