Разделение модели EF6 - PullRequest
       4

Разделение модели EF6

0 голосов
/ 13 ноября 2018

Я пытаюсь использовать общую модель, на которую ссылаются несколько программ, и не уверен, как правильно спроектировать ее для повторного использования. Не всем программам понадобятся все части модели, но id предпочитает не иметь разные версии этой версии с точки зрения контроля версий.

Я создал (упрощенную) модель в EF6, которая включает следующее:

Locations
Materials
Formulas

Моя бизнес-логика может добавлять материалы в формулы или местоположения:

AddMaterialToLocation(Material material)
AddMaterialToFormula(Material material)

Ссылочной программе нужно все вышеперечисленное. У него есть система формулировок и склад, поэтому он хочет использовать обе вышеуказанные функции.

Ссылочная программа два, однако, имеет только склад, ей не нужны формулы. Модель, на которую ссылаются, однако все еще делает. (Программа два находится в другой базе данных / ПК в целом)

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

Я смотрел на это следующим образом: -

  1. Чтобы все модели были объединены в единое целое, но во второй программе не нужно называть детали, которые им не нужны.
  2. Разделить модель на две части. У одной половины есть две таблицы / классы сущностей (Местоположения / Материалы), а у другой - (Формулы / Материалы). Это позволяет программе 2 создавать только ту часть модели, которая ей нужна.
  3. Разделите модель на три части, по одной на таблицу / класс. Каждая программа собирала части по отдельности и передавала / преобразовывала между ними, используя только основные типы?
    AddMaterialToLocation(int MaterialCode, string MaterialName)

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

Вышеуказанные решения имеют следующие недостатки: -


Вариант 1 - приведет к созданию множества неиспользуемых объектов для второй программы.
Вариант 2 - будет иметь два одинаковых Entite Material (которые также будут одной и той же таблицей БД)
Вариант 3 - будет много edmx. Ничто не будет связано - например, свободные свойства навигации и т. Д.

Есть ли лучший способ?

1 Ответ

0 голосов
/ 14 ноября 2018

У каждой проблемной области есть свое собственное пространство решения и определенная бизнес-модель.

когда вы пытаетесь создать модель для первой программы, она имеет свою собственную модель, которая больше не существует в своем определении (вариант 1, нижняя сторона).

почему вы хотите связать две программы друг с другом, когда они полностью разделены в машине и базе данных?

возможно, позже вы захотите применить к программе те изменения, которые не нужны во второй программе, и это усложнит вам задачу *

но если ваша общая модель имеет одинаковые данные (общие данные) для двух программ, вы можете использовать какое-либо решение, например Microservice для общей модели (я не знаю деталей ваших программ)

...