Создание повторно используемых бизнес моделей с...
DESCRIPTION
Материалы со встречи: http://getdev.net/Event/xaf-reuse Задумывались ли вы когда-нибудь, что с переходом от SQL к DataSet, а затем и к ORM типа Entity Framework развитие технологий для доступа и управления данными приостановилось? Что еще нового можно придумать к уже привычному оперированию записями таблиц БД как объектами CRL и при этом поднять удобство разработчика на следующий уровень? На этот и другие вопросы попробует дать ответ доклад о технологии Domain Components (часть DevExpress eXpressApp Framework), которая облегчает создание повторно используемых бизнес моделей за счет легкого комбинирования путем использования интерфейсов вместо классов (это позволяет вам эмулировать "множественное наследование" в C# и VB.NET), а также свободы от особенностей конкретной ORM.TRANSCRIPT
![Page 1: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/1.jpg)
Создание повторно используемых бизнес моделей с помощью технологии Domain
Components (DC)
Денис Гаравский , Frameworks Team, DevExpress
[email protected] | @DennisGaravsky | www.devexpress.com
![Page 2: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/2.jpg)
Принцип трех I илизнакомство с Domain
Components
Interface vs СlassЛегкое комбинирование за счет «множественного наследования»
Independence from ORMПростое тестирование и сопровождение
Inversion of Control (IoC)Бизнес логика добавляется через Dependency InjectionКомпоновка в реальные объекты выбранной ORM происходит во время исполнения (runtime)
![Page 3: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/3.jpg)
Морфология Domain Components
ПроизводныйDomain
Component
ИнтерфейсIPerson
ИнтерфейсIAccount
Класс логикиIPerson
Класс логикиIAccount
ИнтерфейсICompany
Класс логикиICompany
[DomainComponent]interface ICRMCustomer : IAccount, ICompany, INotes, IPhones, ... , ... {...}XafTypesInfo.Instance.RegisterEntity(«MyAppCustomer", typeof(ICRMCustomer));
![Page 4: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/4.jpg)
Доменный компонент (DC)
“Это интерфейс, помеченный атрибутом DomainComponentAttribute и определяющий контракт данных и методов работы с ними”
[DomainComponent]public interface IMyDcInterface { <data type> DataN {get; <set;>} <return type> MethodN (<parameters>); //other data and method contracts…}
![Page 5: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/5.jpg)
Доменная логика (Domain Logic)“Это класс, помеченный атрибутом DomainLogicAttribute и определяющий поведение выбранного Domain Component интерфейса”
[DomainLogic(typeof(IMyDcInterface))]public class MyDcInterfaceLogicClass { public <return type> MethodName( <IDcInterface instance>, <IObjectSpace dbContext>, <other optional parameters> ) { //some cool implementation… }}
![Page 6: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/6.jpg)
Виды Domain Logic
Built-in/reserved Custom/user-defined
AfterConstruction Get_PropertyName
OnLoaded Set_PropertyName
OnSaving BeforeChange_PropertyName
OnSaved AfterChange_PropertyName
OnDeleting MethodName
OnDeleted
![Page 7: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/7.jpg)
Виды Domain Components
По типу хранения данных:• Persistent
• Non-Persistent
По типу регистрации в приложении:• Entities (через метод RegisterEntity)• Shared Parts(через метод RegisterSharedPart)
![Page 8: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/8.jpg)
Non-Persistent DC
• Удобны когда компоненту не требуется отдельная таблица для хранения своих данных, а используется таблица производного компонента
• Можно использовать как маску или шаблон данных при создании произвольных компонентов
• Такой компонент нельзя использовать для запросов к базе, так для него нет таблицы
![Page 9: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/9.jpg)
Shared Parts DC• Сервисные persistent компоненты, которые
агрегируются более чем одним доменным компонентом, зарегистрированным как Entity в приложении
• Нужны во избежание коллизий между значениями ключей, используемых в разных Entities
• Требуют особой регистрации через метод RegisterSharedPart и накладывают следующие ограничения на ключ базового класса: – должен быть публичным mutable свойством Oid и
иметь тип System.Guid
![Page 10: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/10.jpg)
Попробуем «сахар» на вкус...
• Сравним создание моделей с XPO и DC
• Посмотрим на созданные таблицы в БД
• «Вскроем» внутренности DC с помощью
Reflector
Примеры в «студию»!
![Page 11: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/11.jpg)
Плюсы (+)• Возможность создать самодостаточные
бизнес компоненты или библиотеки, и, протестировав единожды, использовать их в различных проектах
• Синтаксический сахар в виде «множественного наследования» интерфейсов, позволяющий легко комбинировать их, производя новые бизнес компоненты, агрегирующие данные и поведение своих запчастей
• Легкое тестирование и разработка ввиду отсутствие завязок на конкретный ORM
![Page 12: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/12.jpg)
Минусы (-)
• Дополнительная абстракция ухудшает понимание
• Отсутствие тотального контроля за создаваемой БД– Не лучшее решение для существующих схем– Наличие обязательных сервисных таблиц и ограничений
на тип ключевого поля
• Чрезмерное увлечение «множественным наследованием» может привести к потере производительности
![Page 13: Создание повторно используемых бизнес моделей с помощью технологии Domain Components](https://reader036.vdocuments.site/reader036/viewer/2022082416/555e1b8cd8b42a9e188b5959/html5/thumbnails/13.jpg)
Хотите узнать больше?
• DevExpress - www.devexpress.com
• XAF - www.devexpress.com/xaf
• DC - http://bit.ly/XicRxa
Вопросы в студию!