Подтвердить что ты не робот

Что такое CSLA Framework и его использование?

Что такое CSLA Framework и его использование?

4b9b3361

Ответ 1

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

Я бы очень рекомендовал вам прочитать книгу CSLA от Rocky Lhotka под названием Expert С# 2008 Business Objects. Это не только научит вас основам, но и научит хороших разработчиков архитектуры программного обеспечения.

Вы можете взять книгу здесь на Amazon

Ответ 2

Мои мнения из моего опыта с базой кода LOC 1.7M:

  • CSLA предназначен для среды распределенного приложения/базы данных. Вот почему основной бизнес-объект - это и делает все, например, он сохраняет постоянство данных. Объект (и все, что удаленно связано с его состоянием) предназначен для сериализации, отправки на другое приложение и/или сервер данных и работы.
  • Если выше не проблема, вам нужно решить, CSLA слишком много, большое время. Наша команда разработчиков сожалеет о том, что взяла на себя обязательство CSLA.
  • Жонглирование всеми шарами CSLA в сложном оконном интерфейсе жестко. У нас есть экраны с несколькими вкладками (которые могут, в свою очередь, открывать вспомогательные экраны), если вы не следите за потоком ввода "слева направо", "сверху вниз" и часто нажимаете "Сохранить", заканчивая отправкой и/или извлечением неполных данных в/из базы данных; или вообще удалить данные, которые вы только что ввели. Да, наши оригинальные кодеры ошибаются, но CSLA... Кажется, что есть так много движущихся частей, чтобы включать, управлять и координировать функции CSLA. Это похоже на то, чтобы иметь дело со всеми циферблатами и переключателями истребителя, когда все, что вам действительно нужно, это нечто большее, чем Cessna 152.
  • Вы будете писать много настраиваемого кода, чтобы включить функции CSLA. Например, CSLA никогда не будет путать с инструментами реляционного сопоставления объектов (ORM), такими как Hibernate и Entity Framework. Наши методы SAVE() не являются тривиальными, так же как и тривиальные.
  • Поощрение использования проблем с генераторами кода. Мы использовали CodeSMith для генерации классов из таблиц данных. Таким образом, мы получаем код, который имеет соответствие 1-1 таблицы с классом С#. Поэтому вы должны написать весь код для обработки dataStore для ваших "реальных" объектов.
  • Хранилище данных и выборка очень неэффективны с CSLA. Из-за Бегемот, монолитной бизнес-идеологии BusinessObject-all-and-know-all, объекты в конечном итоге выполняют выборку и экземпляр данных с использованием одного объекта в момент времени. Коллекции композитных объектов значительно осложняют проблему. Единый "получить этот объект" всегда приводит к каскаду отдельных выборок данных (один или несколько для каждого отдельного объекта) для создания целых цепей наследования и составных отношений. Его называют "проблемой запроса N + 1". О, и выборка данных ALWAYS приводит к созданию нового объекта, даже если мы только обновляем существующий. Неудивительно, что наши более сложные экраны FUBAR.

Он позволяет вам архивировать ваше приложение с принципами, ориентированными на твердые объекты, и хорошим разделом проблем.

Да и нет. В основном нет.

BusinessObject обрабатывает собственное хранилище данных. Это анти-разделение проблем.

"Это позволяет вам..." Ну, да, так же как и пустой экран текстового редактора, но не усиливает и не поощряет вас, например, как это делает MVC.NET. IMHO, CLSA обеспечивает абсолютно нулевую выгоду для обеспечения того, чтобы код, который вы разрабатываете с ним, следует "твердым принципам OO". На самом деле кодеры с слабыми навыками OO (большинство, по моему опыту) действительно выделяются при использовании CSLA! Горе у программиста по обслуживанию.

CSLA является родителем плаката для твердого объектно-ориентированного принципа, способствующего композиции над наследованием. Код CLSA не поддается тестированию. Поскольку унаследованная инфраструктура BusinessObject имеет, делает и нуждается во всем, все сразу и каждый раз, вряд ли вам удастся получить много тестового покрытия. Вы не можете попасть на куски, потому что все тесно связано. Рамка не поддается инъекции зависимостей. Это железная занавеска кода.

Ваш код будет трудно отлаживать. Стеки вызовов становятся очень глубокими, и, когда вы приближаетесь к центру Солнца, так что все превращается в отражение - "какие методы & ^ # получили название?" И вы просто теряетесь. период.

РЕДАКТИРОВАТЬ 7 марта 2016 г.

Какую дополнительную информацию я могу добавить после оригинального сообщения? Две вещи, возможно:

Во-первых, похоже, что у CSLA есть некоторые обещания. Если бы мы знали, как сжимать все эти движущиеся части вместе. Но CSLA настолько загадочна, что даже те вещи, которые мы сделали правильно, со временем повреждены. ИМХО без очень сильного командного CSLA, любая реализация обречена. Без яркого "открытого источника" технических ссылок, обучения и сообщества это безнадежно. Почти через десять лет наш код CSLA, в моем окончательном анализе, просто усугубляет технический долг.

Во-вторых, вот недавний комментарий, который я сделал ниже:

Наша сложность часто не подходит для инфраструктуры CSLA поэтому мы пишем вне рамки. Этот и дешевый труд приводит к необузданные нарушения SRP, и я поражаю кирпичные стены, управляющие динамическими например, правило. Затем родительская/дочерняя инфраструктура CSLA распространяет проверку составного объекта, но мы не всегда хотим, чтобы c/p отношений, поэтому мы пишем больше кода проверки и сохранения. Поэтому сегодня наша реализация CSLA является непоследовательной и запутанной. Рефакторинг для более качественный CSLA будет иметь глубокие эффекты домино. Итак, после этого начальная инъекция CSLA по существу оставлена.

конец Редактировать

Ответ 4

CSLA: масштабируемая логическая архитектура на основе компонентов

В двух словах, которые описывали CSLA для меня с сайта, было следующее:

CSLA.NET позволяет создавать объектно-ориентированный бизнес-уровень, который абстрагирует и инкапсулирует вашу бизнес-логику и данные. Структура обеспечивает бесперебойную работу ваших бизнес-объектов со всеми технологиями интерфейса .NET, включая WinRT XAML, WPF, ASP.NET MVC, ASP.NET Web Forms, WCF, asmx-сервисы, Windows Phone 7, Silverlight, Windows Workflow и Windows Forms.

Почему вы можете использовать его:

Управление бизнес-правилами. После того, как вы изучите систему бизнес-правил, она обеспечивает способ обеспечения бизнес-логики в аккуратном пакете. Если у вас есть объект с дочерними объектами, которому необходимо сообщить о валидации на родительский уровень, существует способ его устранения. (см. http://www.lhotka.net/weblog/CSLA4BusinessRulesSubsystem.aspx для получения дополнительной информации о системе правил)

У вас есть бизнес-объекты, необходимые для поддержки отмены N-уровня? В CSLA BusinessBase используется система управления собственностью (например, свойства зависимостей) для таких функций, как N-Level Undo (она фактически полностью реализована). (Это также связано с управлением бизнес-правилами. Вы можете активировать проверку при изменении основного свойства, или вы можете изменить свойство, основанное на значении другого свойства.)

Управление порталом данных. Это было интересное понятие. Если мне нужно выполнить операции с данными локально, CSLA настроен для этого из коробки. Я также могу поддержать службу WCF, которая ссылается на мои библиотеки бизнес-объектов, и использовать несколько строк конфигурации, чтобы сделать конечную точку WCF для управления операциями данных. Служба WCF является частью структуры CSLA. Было здорово видеть это в действии. Другие сценарии? Конечно! Ваша библиотека бизнес-объектов не нуждается в изменении, класс DataPortal определяет, нужно ли выполнять удаленно или локально, в соответствии с вашей конфигурацией.

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

CSLA, при правильной архитектуре, можно проверить. Мы используем шаблон репозитория, чтобы заменить фактический dal слоем макета и протестировать как по спецификации (используя NUnit/SpecFlow), так и по отдельности, когда это необходимо.

Что касается поддержки, в том числе и самого Рокки, есть сообщество разработчиков, которые гарантируют, что такие вещи, как CSLA.Net для Xamarin, станут реальностью. Существуют консультанты, которые знают CSLA и используют его на регулярной основе в зависимости от объема работы (и нет, а не только консультации, для которых я работаю.)

С учетом всех вещей CSLA может быть не для вас. Как указывали другие, читайте сайт и книги (особенно Business С# 2008 Business Objects). Задавайте вопросы, поскольку сообщество CSLA обычно дает качественные рекомендации.

Ответ 5

В ответ на @radarbob fooobar.com/questions/221593/... надеюсь, что я не пожалею об этом и не начну пламенную войну.

Наша команда разрабатывает несколько приложений LOB с CSLA. Из моего опыта написания приложений с зеленым полем с CSLA и поддержания существующего кода здесь приведены мои ответы на ваши вопросы.

  • BO не допускает, чтобы он сохранял постоянство данных, у вас будет Factory, который будет обрабатывать все данные, например, используя ORM для сопоставления с моделями, которые позже сохранены.

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

  • У вас есть BO → Portal → Заводы, которые не должны быть очень сложными, существующие примеры CSLA дают долгий путь для объяснения того, что происходит на каждом уровне.

  • CLSA никогда не следует путать с ORM

  • Как и следовало ожидать, бизнес-объект редко сопоставляется с одной таблицей и поэтому требует экономии при сохранении. В случае, если они сопоставлены с одной таблицей, вы используете что-то вроде AutoMapper для сопоставления своего BO с вашим POCO в 1 строке.

  • Посмотрите на CSLA-команды, также ничто не мешает вам поддерживать ваш BO как маленький или большой, как вы хотите, если вы помните, что они не совпадают с POCO, которые вы будете продолжать.

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

В какой-то момент я смог легко сохранить часть своего BO в MongoDB, поэтому приложение выполнялось на гибридной базе данных MSSQL и MongoDB, даже не меняя одну строку кода в моих бизнес-объектах, все, что мне нужно было сделать чтобы обновить фабрики, чтобы использовать Mongo вместо текущей ORM.

Надеюсь, что это справедливо относится ко всем вашим точкам,

Привет

Ответ 6

CSLA подробно описывается здесь. Новая книга - отличная отправная точка. Как отличный комплимент этой книге я бы рекомендовал проверить наши шаблоны CSLA 3.8. Rocky рекомендует использовать генератор кода, и у нас есть ведущий набор шаблонов, который поможет вам быстро и быстро запустить.

Спасибо -Blake Niemyjski (автор CodeSmith CSLA Templates)