Прежде чем я конкретно отвечу на Ваш вопрос, я хотел бы подавить несколько мыслей. Действительно ли CSLA является правильным для Вашего проекта? Это зависит. Я лично рассмотрел бы CSLA для основанных на рабочем столе приложений, который не оценивает поблочное тестирование как высокий приоритет. CSLA является большим, если Вы хотите легко масштабироваться к n-tier приложению. CSLA имеет тенденцию получать некоторого агента по печати, потому что он не позволяет чистое поблочное тестирование. Это верно, однако как что-либо в технологии, я полагаю, что существует Никакой Истинный Путь . Поблочное тестирование не может быть чем-то, что Вы предпринимаете для определенного проекта. Какие работы для одной команды и одного проекта не могут работать на другую команду или другой проект.
существует также много неправильных представлений в отношении CSLA. Это не ORM., это не конкурент NHibernate (на самом деле использующий Бизнес-объекты CLSA & NHibernate как доступ к данным соответствуют действительно хорошо вместе). Это формализует понятие Мобильный Объект .
1. Сколько людей использует CSLA?
На основе Форумы CSLA , который я сказал бы, существует множество базирующихся проектов CSLA там. Честно, хотя, я понятия не имею, сколько людей на самом деле использует его. Я использовал его в прошлом на двух проектах.
2. Каковы за и против?
, В то время как трудно подвести итог в коротком списке, вот некоторые про / довод "против", которые приходят на ум.
Профессионалы:
Недостатки:
3. После чтения это делает CSLA действительно не, согласуются с TDD?
я не нашел эффективный способ сделать TDD с CSLA. Однако я уверен, что существуют многие более умные люди там, чем я, который, возможно, попробовал это большим успехом.
4. Каковы мои альтернативы?
Domain-Driven-Design получает большое нажатие в данный момент (и законно так - это фантастически для некоторых приложений). Существует также много интересных разработок шаблонов из введения LINQ (и LINQ к SQL, Платформе Объекта, и т.д.). Книга PoEAA Fowlers, детализирует много шаблонов, которые могут подойти для Вашего приложения. Обратите внимание, что некоторые шаблоны конкурируют (т.е. Активная Запись и Репозиторий), и таким образом предназначены, чтобы использоваться для определенных сценариев. В то время как CSLA точно не соответствует ни одному из шаблонов, описанных в той книге, он наиболее тесно напоминает Активную Запись (хотя я чувствую, что это близоруко для требования точного совпадения этот шаблон).
5. Если Вы прекратили использовать его или отклонили почему?
я не полностью рекомендовал CSLA для своего последнего проекта, потому что я полагаю, что объем приложения является слишком большим для преимуществ, которые предоставляет CSLA.
я был бы не использование CSLA на веб-проекте. Я чувствую, что существуют другие технологии, лучше подходящие для создавания приложений в той среде.
, Таким образом, в то время как CSLA совсем не серебряная пуля , это подходит для некоторых сценариев.
Hope это помогает!
Я хотел использовать его, но у моего тогда ведущего разработчика была идея, слишком много 'волшебства' было включено...
Я - парень PHP. Когда мы начали создавать сравнительно крупномасштабные приложения с PHP, я начал исследовать на большом количестве сред разработки приложения и ORMs по существу в мире PHP, затем в Java и.NET. Причина я также посмотрел на Java и платформы.NET, не состояла в том, чтобы вслепую использовать платформу PHP, но сначала попытаться понять то, что действительно продолжается, и какая архитектура уровня предприятия там.
, поскольку я не использовал CSLA в приложении реального мира, я не могу прокомментировать его за и против, но что я могу сказать, Lhotka, один редкие мыслители-I'm, не говоря просто эксперта - в поле Software Architecture. Хотя Домен имени, Управляемый Дизайн выдуман Eric Evans - его книга, является также большим, и я кротко советую для чтения его - Lhotka применял домен управляемый дизайн в течение многих лет. Однако независимо от того, что Вы думаете о его платформе, преимуществе от его глубоких идей в поле.
можно найти его переговоры о dotnetrocks.com/archives.aspx и видео с dnrtv.com/archives.aspx (поиск Lhotka).
@Byron, Каковы другие две книги, которые Вы любили?
Я использовал его для пары проекта несколько лет назад. Но когда проект был сделан, я не мог сказать никому, что CSLA сделал для меня. Несомненно, я наследовался его классам. Но я смог удалить то наследование почти из всех классов без реструктуризации. Нам не нравился материал N-Tier. Отмена n-уровня была столь медленной, что мы не могли использовать ее. Таким образом, я предполагаю конец, он только помог нам смоделировать наши классы.
Однако другие команды начали использовать его (после того, как неприятная попытка команды создать их собственную платформу). Таким образом, должно быть что-то стоящее там, потому что они все более умны, чем я!
Мы используем CSLA экстенсивно. Существует несколько преимуществ; во-первых, я полагаю, что каждый разработчик направления деятельности должен прочитать книгу Rocky Lhotka по программированию Бизнес-объектов. Я лично нашел, что это, чтобы быть в моих лучших 3 лучшем программировании заказывает когда-либо. CSLA является платформой на основе этой книги, и использование его предоставляет Ваш доступ проекта к функциональности очень высокого уровня как отмена n-уровня, правила проверки и архитектура масштабируемости при предоставлении подробной информации для Вас. Заметьте, что я сказал "обеспечение" и "не сокрытие". Я нашел, что большая часть CSLA, это, заставляет Вас понять, как все эти вещи реализованы вниз к исходному коду, не заставляя Вас воспроизвести их самих. Можно принять решение использовать столько или немного функций, сколько Вам нужно, но я нашел, что путем оставления верного шаблонам разработки платформы, это действительно не допускает Вас в проблему. - Byron
Наша компания занялась CSLA в некоторых его проектах, и некоторые проекты прежней версии остаются быть CSLA. Другие проекты переехали от него, потому что CSLA нарушил простое и простое правило ООП: Единственный Принцип Ответственности.
объекты CSLA являются самоподдерживающимися, например, они получают свои собственные данные, они управляют своим собственным поведением, они сохраняют себя. К сожалению, это означало, что Ваш средний объект CSLA имеет по крайней мере три обязанности - представление модели предметной области, содержа бизнес-правила, и содержащий определение доступа к данным (не DAL или реализация доступа к данным, как я ранее заявлял/подразумевал), все одновременно.
Мы начали использовать CSLA, потому что мы думали, что он поможет с нашим образцовым слоем. Был вид излишества и главным образом всего, что мы используем, теперь класс SmartDate, просто потому что мы уже связаны с библиотекой.
Мы думали, что интерфейс проверки действительно поможет нам осуществить бизнес-правила, но он не работал хорошо с WCF и сериализацией (мы все еще застреваем на версии 2.0.3.0, таким образом, вещи, возможно, изменились).
В защиту CSLA, хотя я действительно соглашаюсь со многими комментариями, которые были сделаны особенно поблочным тестированием один...
Моя компания использовала его экстенсивно для приложения ввода данных Windows Forms с высокой степенью успеха.
В целом я сказал бы, что любыми проблемами, которые это вызвало, были больше, чем outwayed преимуществами.
ОБНОВЛЕНИЕ: В дополнение к этому мы все еще используем его для нашего приложения форм окон, но эксперименты с использованием его для других приложений, таких как веб-сайты показали, что это, возможно, к громоздкому, когда Вам не нужна большая часть его функциональности, и мы теперь исследуем более легкие опции веса для этих сценариев.
У меня был опыт с ним несколько лет назад. Это - блестящая архитектура, но очень сложный, трудный понять или измениться, и это решает проблему, которую большинство из нас разрабатывающее веб-приложения не обязательно имеет. Это было разработано больше для основанных на окнах приложений и обработки многоуровневой отмены с особым упором на транзакционную логику. Вы, вероятно, услышите, что люди говорят, что, так как веб-приложения являются ответом запроса на уровне страницы, это является несоответствующим, но с веб-приложениями стиля AJAX, возможно, этот аргумент не содержит такого большого количества воды.
Это имеет очень глубокую объектную модель, и это может требовать времени для реального обертывания мозга вокруг этого. Конечно, много может измениться за несколько лет. Мне было бы интересно слышать другие недавние мнения.
, Учитывая все обстоятельства, это не был бы мой предпочтительный вариант архитектуры.
Я использовал CSLA для одного проекта, и это работало отлично, и сделайте вещи намного более простыми и более опрятными.
Вместо того, чтобы иметь Вашу команду, пишущую бизнес-объекты в их собственном различном персональном стиле, мы знаем, имеют единый стандарт для работы против.
//andy
Да, я (гм, мы) использовал его экстенсивно для моделирования нашей логики бизнес-процесса, которая была, прежде всего, связана с данными формы в приложении форм окон. Приложение было торговой системой. CSLA разработан, чтобы быть на том слое чуть ниже UI.
, Если Вы думаете о своем стандартном сложном приложении направления деятельности, что у Вас может быть форма со многими полями, многими правилами для тех полей (включая правила проверки поля перекреста), можно вызвать модальное диалоговое окно для редактирования некоторого дочернего объекта, можно хотеть быть в состоянии быть в состоянии отменить такие диалоговые окна и вернуться назад к предыдущему состоянию. CSLA поддерживает это.
Это - недостатки, то, что это имеет определенную кривую обучения.
ключевая вещь помнить состоит в том, чтобы использовать CSLA, чтобы смоделировать, как пользователь взаимодействует с формами на некотором приложении. Самый эффективный путь ко мне состоял в том, чтобы разработать UI и понять, что это - потоки, поведение и правила проверки прежде, чем создать объекты CSLA. Не имейте своего дизайна UI диска объектов CSLA.
Мы также нашли очень полезным быть в состоянии использовать сторону сервера бизнес-объектов CSLA для проверки объектов, отправленных от клиентов.
Мы также создали в механизмах для выполнения проверки асинхронно против веб-сервиса (т.е. проверка диапазона кредитного лимита контрагента против ведущего устройства).
CSLA осуществляет сильное разделение между Вашим UI, BusinessLogic и Постоянством, и мы записали загрузку модульных тестов против них. Это не может быть строго TDD, потому что Вы управляете им от дизайна UI, который не означает, что это не является тестируемым.
единственная реальная альтернатива создает Вашу собственную модель \бизнес-объекты, но довольно скоро Вы заканчиваете тем, что реализовали опции, которые CSLA предлагает из поля (INotifyPropertyChanged, IDataErrorInfo, PushState, PopState и т.д.)
Мы использовали CSLA теперь больше пяти лет, и мы думаем, что он работает отлично для построения бизнес-приложений. Вместе с генерацией кода можно создать бизнес-объекты в относительный короткий срок и сфокусировать усилие на суть из приложения.
Для не взятия CSLA списка, но перед использованием его, исследуют преимущества и удостоверяются, что они действительно применяются. Ваша команда сможет правильно/последовательно реализовать его? Дистанционная работа и портала танец необходимы?
Я думаю вне всего теоретического, обдумывают, это - все о чистом/удобном в сопровождении/растяжимом/тестируемом коде после основных доказанных шаблонов.
Я считал строки кода необходимыми в определенном домене проекта преобразованный из CSLA. Между всеми различными объектами CSLA (readonly+editable+root+list комбинации) и их сохраненный procs проводило приблизительно 1 700 строк, по сравнению с Linq2SQL + реализация Репозитория, которая проводила 180 строк. Версия Linq2SQL состояла главным образом из сгенерированных классов, которые Ваша команда не должна использовать книгу для понимания. И да, я использовал CodeSmith для генерации частей CSLA, но я теперь верю в код DRY с единственными битами ответственности, и реализация CSLA теперь смотрит на меня как вчерашний герой.
Как альтернатива я хотел бы предложить изучить Linq2Sql/Entity Framework/NHibernate, объединенный с шаблонами Репозитория и UnitOfWork. Взгляните на http://www.codeplex.com/backgroundmotion
Удачи!
В последний раз я пытался использовать CSLA в дни каменного века VB6. Оглядываясь назад, было бы более эффективно, если бы я использовал генерацию кода. Если у вас нет эффективных инструментов генерации кода и стратегии для их встраивания в ваш рабочий процесс, вам следует избегать таких фреймворков, как CSLA, в противном случае функции, которые вы получаете от CSLA, не будут компенсировать количество времени, потраченное на написание n строк кода на таблицу, n строк кода на столбец и т. д.
Джон,
У нас есть команды, работающие в CSLA от 2 до 3,5, и мы обнаружили, что это отличный способ обеспечить согласованную среду, поэтому все разработчики «делают это одинаково». Хорошо, что большая часть кода с низким значением генерируется, и мы знаем, что когда мы запускаем модульные тесты, они работают «из коробки» для всего, что касается CRUD. Мы находим, что наш TDD действительно приходит с рефакторингом, который мы делаем для проектирования, и CSLA не мешает нам делать это.
Крис
Я использую CSLA в качестве структуры бизнес-объектов для проекта среднего размера. Фреймворк прошел долгий путь от дней VB6 и предлагает необычайную гибкость и готовность к работе. Мобильные смарт-объекты CSLA значительно упрощают разработку пользовательского интерфейса. Однако я согласен с другими, это не подходящий инструмент для каждой ситуации. Это определенно связано с некоторыми накладными расходами, но также и с большой мощностью. Лично я с нетерпением жду возможности использовать CSLA Light с Silverlight.
1 Хорошо, потому что технологии доступа к данным никогда не остаются неизменными надолго.
2 В последних версиях инфраструктуры ситуация улучшилась.
Прочитав все ответы, я заметил, что довольно много людей имеют некоторые неправильные представления о CSLA.
Во-первых, CSLA не является ORM . Как я могу сказать это так определенно? Потому что Рокфорд Лхотка сам неоднократно заявлял об этом в интервью на подкастах .NET Rocks и Hanselminutes . Найдите любой эпизод, в котором у Рокки брали интервью, и он однозначно об этом скажет. Я думаю, что это наиболее важный факт для понимания людьми, потому что почти все заблуждения о CSLA возникают из-за веры в то, что это ORM, или из попытки использовать его как единое целое.
Как Брэд Лич упомянул в своем ответе, CSLA-объектная модель поведение, хотя было бы точнее сказать, что они моделируют поведение данных, поскольку данные являются для них неотъемлемой частью. CSLA - это не ORM, потому что он полностью не зависит от того, как вы общаетесь со своим хранилищем данных. Вам следует использовать какой-то уровень доступа к данным с CSLA, возможно, даже ORM. (Да. Теперь я использую Entity Framework, которая прекрасно работает.)
Теперь перейдем к модульному тестированию. У меня никогда не было проблем с модульным тестированием моих объектов CSLA, потому что я не помещаю свой код доступа к данным непосредственно в свои бизнес-объекты. Вместо этого я использую некоторые вариации шаблона репозитория. Репозиторий используется CSLA, а не наоборот. Заменив поддельный репозиторий для моих модульных тестов и используя локальный портал данных, БУМ! это просто. (Как только Entity Framework разрешит использование POCO, это станет еще чище.)
Все это происходит от осознания того, что CSLA не является ORM. Это может потреблять ORM, но сам по себе он не один.
Ура.
Я подумал, что сделаю еще несколько комментариев.
Некоторые люди говорят, что CSLA многословен по сравнению с такими вещами, как LINQ to SQL и т.д. на. Но здесь мы сравниваем яблоки с апельсинами. LINQ to SQL - это ORM. Он предлагает некоторые вещи, которых нет в CSLA, а CSLA предлагает некоторые вещи, которых нет в L2S, например, интегрированную проверку и n -более стабильную работу через различные удаленные порталы данных. На самом деле, я бы сказал, что последнее, n -более настойчивое, для меня превосходит их все. Если я хочу использовать Entity Framework или LINQ to SQL по сети, я должен поставить что-то вроде WCF между ними, и это значительно увеличивает объем работы и сложность до такой степени, что, по моему мнению, это намного больше подробней, чем CSLA. (Теперь я фанат WCF, REST и SOA, но используйте его там, где это действительно необходимо, например, когда вы хотите предоставить услугу третьим лицам. Для большинства бизнес-приложений в этом нет необходимости, и CSLA - лучший выбор.) Фактически, с последней версией CSLA Rocky предоставляет WCFDataPortal
, который я использовал . Он отлично работает.
Я поклонник SOLID , TDD и других современных принципов разработки программного обеспечения, и использую их везде, где это возможно. Но я думаю, что преимущества CSLA перевешивают некоторые возражения тех ортодоксальных сторонников, и в любом случае мне удалось заставить CSLA работать достаточно хорошо (и легко) с TDD, так что это не проблема.
в последней версии CSLA Rocky предоставляет WCFDataPortal
, который я использовал. Он отлично работает.
Я поклонник SOLID , TDD и других современных принципов разработки программного обеспечения, и использую их везде, где это возможно. Но я думаю, что преимущества CSLA перевешивают некоторые возражения тех ортодоксальных сторонников, и в любом случае мне удалось заставить CSLA работать достаточно хорошо (и легко) с TDD, так что это не проблема.
в последней версии CSLA Rocky предоставляет WCFDataPortal
, который я использовал. Он отлично работает.
Я поклонник SOLID , TDD и других современных принципов разработки программного обеспечения, и использую их везде, где это возможно. Но я думаю, что преимущества CSLA перевешивают некоторые возражения тех ортодоксальных сторонников, и в любом случае мне удалось заставить CSLA работать достаточно хорошо (и легко) с TDD, так что это не проблема.
Сейчас я использовал CSLA.NET в нескольких проектах, наиболее успешным он оказался в приложении Windows Forms, которое имеет богатую совместимость с привязкой данных (чего нет в приложении asp.net).
Основная проблема заключается в поддержке TDD, как уже отмечали люди, это из-за поведения функций Dataportal_XYZ, подобного черному ящику, и невозможности имитации объектов данных. Были предприняты попытки обойти эту проблему, это лучший подход
CSLA - лучшая из существующих платформ приложений. Рокки ЛХотка очень, но очень умный парень. Он пишет историю разработки программного обеспечения, как Мартин Фаулер, Дэвид С. Платт, но мои любимые писатели - Род Стивенс, Мэтью МакДональдс, Джефф Левинсон, Теарон Уиллис и Луи Дэвидсон, псевдоним dr sql. :-) Плюсы: применяются все шаблоны проектирования. Минусы: трудно выучить, мало примеров.
Я использую CSLA с vb5, когда это была скорее коллекция шаблонов, чем фреймворк. С появлением.NET CSLA превратилась в полноценный фреймворк, который потребовал серьезного обучения. Однако CSLA решает многие задачи, которые все бизнес-разработчики в какой-то момент (в зависимости от масштаба проекта) пишут сами: логика валидации, логика аутентификации, функциональность отмены, грязная логика и т. д. Все эти вещи вы получаете бесплатно из коробки в одном красивом фреймворке.
Как отмечали другие, будучи фреймворком, он заставляет разработчиков писать бизнес-логику аналогичным образом. Он также заставляет вас обеспечить уровень абстракции для вашей бизнес-логики, так что неиспользование UI-фреймворка, такого как MVC, MVP, MVVM, становится не столь важным.
На самом деле, я бы утверждал, что причина, по которой многие из этих паттернов UI так популярны сегодня (в мире Microsoft), заключается в том, что люди так долго делали все невероятно неправильно (т.е. использовали DataGrids в UI, распыляли свою бизнес-логику повсюду.) Если с самого начала правильно спроектировать средний уровень (бизнес-логику), вы сможете повторно использовать средний уровень в любом пользовательском интерфейсе. Win Form, ASP.NET/MVC, WCF Service, WPF, Silverlight**, Windows Service, .....
Но помимо этих преимуществ, огромной пользой для меня стала встроенная способность к масштабированию. CSLA использует шаблон прокси, который настраивается через ваш конфигурационный файл. Это позволяет вашим бизнес-объектам осуществлять удаленные вызовы с сервера на сервер без необходимости написания кода. Добавляете новых пользователей в свою систему? Нет проблем, разверните бизнес-объекты CSLA на новом сервере приложений, внесите изменения в файл конфигурации, и БАМ!!! Мгновенное удовлетворение потребностей в масштабируемости.
Сравните это с использованием DTO, хранением бизнес-логики на клиенте (каким бы он ни был), и необходимостью писать каждый из ваших собственных методов CRUD как методы сервиса. YIKES!!! Я не говорю, что это плохой подход, но я бы не хотел так поступать. Не тогда, когда есть фреймворк, который по сути сделает это за меня.
Я собираюсь повторить слова других людей о том, что CSLA - это НЕ ORM. CSLA заставляет вас снабжать ваши бизнес-объекты данными. Их не волнует, откуда вы получаете данные. Вы можете использовать ORM для снабжения бизнес-объектов данными. Вы также можете использовать сырой ADO.NET, другие службы (RESTFUl, SOAP), электронные таблицы excel, я могу продолжать.
Что касается вашей поддержки TDD, я тоже никогда не пробовал использовать этот подход в CSLA. Я придерживаюсь подхода, при котором я моделирую средний уровень (аля бизнес-объекты), используя диаграммы классов и последовательностей, чаще всего позволяя диктовать сценарии использования, экраны и/или процессы. Возможно, это немного старая школа, но UML всегда служил мне очень хорошо в моих усилиях по проектированию и разработке. Я успешно проектировал и разрабатывал очень большие и масштабируемые приложения, которые используются и сегодня. И пока не созреет WCF RIA, я буду продолжать использовать CSLA...
** с некоторыми обходными путями
Многие люди рекомендуют использовать генерацию кода с CSLA. Я бы рекомендовал ознакомиться с нашим набором поддерживаемых шаблонов, так как они значительно увеличат рентабельность инвестиций.
Спасибо -Blake Niemyjski (Автор CodeSmith CSLA Templates )