Как устроена сущность ELMA (Entity)

Сущность ELMA (Entity) — это объект который хранится в базе данных, сущностью могут быть справочники, документы, процессы и так далее.

Все сущности объединяет интерфейс IEntity.

Класс реализующий интерфейс IEntity — им удобно пользоваться,

  • на основе интерфейса можно получить исчерпывающую информацию сущности ELMA
  • воспользоваться менеджером сущности который требует реализации интерфейса IEntity
var allContractors = EntityManager<CRM.Models.ContractorLegal>.Instance.FindAll();

Этот код вернет всех контрагентов в системе (в реальной системе не используйте FindAll, почему читайте в статье про менеджер сущностей)

Как описать сущность ELMA?

Сущности описываются с помощью интерфейсов и настройки указывают в виде атрибутов к свойствам.

Вручную описывать атрибуты и думать о том как правильно? не нужно —  есть плагин Visual Studio и Дизайнер где можно мышкой настроить сущность.
Поддерживается наследование сущности, расширение и так далее.

Как же так? это все еще интерфейс, где же нормальные классы?

(первый вопрос разработчика)

При загрузке сервера классы и таблицы (а также маппинги для Nhibernate) генерируются автоматически на основе интерфейсов и настроек, собираются в сборку

\Web\App_Data\CompiledModel\EleWise.ELMA.DynamicModel.dll — можете взять

Классы доступны только в дизайнере ELMA и добавить ее в свой проект (модуль ELMA) нельзя.

Например:

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

Посмотрите на схему где показаны четыре интерфейса :

  1. Контрагент
  2. Расширение контрагента
  3. Юридическое лицо
  4. Физическое лицо

В реальной системе интерфейсов конечно же намного больше.

  • На схеме контрагент и его расширение для юридического и физического лица общие.
  • Если вы запросите  всех контрагентов за последний месяц вы получите и юридических лиц и физических.
  • И наоборот запросив Юридических лиц вы не получите контрагентов физических лиц.

Это позволяет разрабатывать систему, сохраняя ее модульность.

Например:

  •  если в вашем модуле необходимы новые поля в контрагенте, вы добавите их в свое расширение

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

Нюансы

  • В ELMA для расширений поля добавляются в расширяемую таблицу
  • при наследовании создается отдельная таблица с не наследуемыми полями

Таким образом из вышеописанных четырех интерфейсов таблиц будет три:

  1. Контрагент+Расширение
  2. Юридическое лицо
  3. Физическое лицо

И конечно же все это настраивается мышкой в плагине ELMA, 70% работы в настройке сущности — ELMA сделает сама.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

%d такие блоггеры, как:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: