Структура проекта
Разделение платформы и бизнес логики решается путем организации классов в соответствующие уровни приложения – уровень разрабатываемый пользователем и уровень метаданных.
Между этими уровнями, в архитектуре платформы, есть каналы управления интерфейсом и управления данными.
Принято следующее правило именования сборок:
C1 – компоненты WinForms от GrapeCity
C2 – системные компоненты платформы
C3 – сборки, относящиеся к прикладному разрабатываемому решению
Структура решения Visual Studio
Приложение строится из двух групп библиотек:
- Библиотеки, разрабатываемые пользователем и содержащие бизнес-логику.
- Библиотеки, создаваемые Дизайнером, на основе структуры метаданных, с помощью обработки генерации классов.
Здесь, для примера, библиотеки, разработанные пользователем:
- C3.Accounting.Module — модули объектов и модули проведения
- C3.Accounting.Win — формы объектов (справочников, документов, отчетов и обработок)
Библиотеки, созданные Дизайнером:
- C3.JustMoney.Model — прикладные объекты (справочники, документы, регистры)
- C3.ModelManager — менеджер доступа к прикладным объектам модели
- C3.ModuleManager — менеджер доступа к модулям прикладных объектов
- C3.JustMoney.Form — базовые классы форм прикладных объектов
- C3.FormManager — менеджер форм прикладных объектов
JustMoney, Accounting, Docflow – имя бизнес логики, может быть любым.
Состав библиотек решения зависит от их следующего функционального назначения:
Модель схемы данных конфигурации (справочники, документы, регистры)
В структуре конфигурации самым обобщенным элементом является схема.
Внутри каждой схемы расположены объекты модели конфигурации (справочники, документы и т.п.).
Важной особенностью является наличие связей между объектами внутри схемы, на уровне базы данных с помощью Foreign Keys. Но объекты в разных схемах такой способностью не обладаю.
Такой подход позволяет в одной конфигурации строить много-сервисную архитектуру данных, распределяя разработку/поддержку схем между разными командами разработчиков.
Сборки модели “C3.JustMoney.Model” или “C3.JustMoney.Data”, “C3.XXX.Model”
- Генерируется Дизайнером
- Включает все объекты данных конфигурации в виде классов (справочники, документы, регистры)
- Через данные классы производится модификация данных в базе данных
- Конфигурация может содержать несколько схем. Данная возможность позволяет обновлять, выгружать, загружать каждую схему самостоятельно
Менеджеры модели (справочников, документов, регистров)
Разрабатывая прикладное решение, разработчик работает с объектами модели, например справочник «Контрагент» или документ «РасходнаяНакладная».
Соответственно, объекты модели принимают в значения полей эти же типы, а не идентификаторы и прочие простые типы языка программирования, например «РасходнаяНакладная.Контрагент = Покупатель», где «Покупатель», это экземпляр типа «Контрагент».
Конструирования прикладных типов модели происходит в менеджере модели.
Сборка “C3.ModelManager” или “C3.DataManager”.
- Генерируется Дизайнером
- Включает менеджеры доступа к данным. Менеджеры возвращают экземпляры классов справочников, документов
- Через экземпляры классов справочников и документов (из сборки модели C3.JustMoney.Model, C3.XXX.Model) производится модификация данных в базе данных
Базовые классы форм элементов конфигурации
- Генерируется Дизайнером
- Сборка включает базовые классы форм элементов всех объектов во всех схемах конфигурации (справочники, документы, регистры)
- Пользовательские формы в библиотеке C3.Accounting.Win, C3.ХХХ.Win наследуются от данных базовых классов
Сборка базовых классов форм “C3.JustMoney.Form”, “C3.XXX.BaseForm”.
Менеджеры форм (справочников, документов, отчетов, обработок)
- Генерируется Дизайнером
- Включает менеджеры доступа к формам объектов (формы элементов, списков). Менеджер форм возвращает экземпляры классов форм, из пользовательских модулей (C3.Accounting.Win, C3.ХХХ.Win)
- Данные формы выводятся в MDI окне приложения
Сборка “C3.FormManager”.
Менеджер модулей объектов и модулей проведения
Платформой обеспечивается гарантированное выполнение предопределенных методов в модулях объектов и модулях проведения при записи или проведении экземпляров объектов, вне зависимости от контекста приложения, windows-приложение или web-приложение.
Примеры таких предопределенных методов – BeforeWrite, AfterWrite, Post, UnPost и т.п.
Применение таких методов можно сравнить с триггерами в базах данных, но с расширенными возможностями, например обращаться в таком методе в сторонний сервис или выполнять расчет итогов, а по каким то причинам прервать транзакцию и еще много чего, что в триггере базы данных невозможно.
Сборка “C3.ModuleManager”.
- Генерируется Дизайнером
- Включает менеджеры доступа к модулям объектов и проведения из пользовательских библиотек C3.Accounting.Module, C3.XXX.Module