Задать вопрос
@Pavel_Develop

Entity Framework и ООП. Как правильно реализовать принцип согласованности?

В ходе разборок с DDD, возник вопрос который ломает мне мозг.
На примере такой предметной области:
Есть небольшой магазин, в нем необходимо автоматизировать процесс продажи и прием продукции на складе.
У нас существуют три варианта документа с которыми работает магазин: Чек, Возврат от покупателя, Накладная.
Кейсы (берем обычные тривиальные случаи):
1. Продажа: приходит человек, пробивается чек, списывается товар из номенклатуры.
2. Возврат от покупателя: приходит человек, оформляется возврат, товар возвращается на склад.
3. Накладная: приходит товар, оформляется накладная, товар добавляется на склад.

Теперь попробуем разбить на сущности:
1. Если брать со стороны Domain-Driven Design:
Product - товар
Order - чек
OrderLine - позиция в чеке, которая не может существовать без чека и продукта и списывает количество товара на складе
Return - Возврат от покупателя, добавляет количество товара
ReturnLine - позиция в возврате
Consignment - накладная
ConsigmentLine - позиция в накладной, добавляет количество товара

2. Data-Driven Design:
Product - товар
Document - документ, с типом(Чек, Возврат, Накладная)
DocumentLine - позиция документа

Как правильно реализовать связь между Business и Database уровнями? Маппинг?
В случае использования маппинга как решить проблему сохранения, добавления позиций, если используется Entity Framework?
Есть ли возможность подходом Code First реализовать классы из Domain-Driven для работы с базой данных, при чем чтобы таблица была одна?
  • Вопрос задан
  • 447 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
> Как правильно реализовать связь между Business и Database уровнями? Маппинг?
А для чего вам EF тогда?
> В случае использования маппинга как решить проблему сохранения, добавления позиций, если используется Entity Framework?
Любая нормальная ORM имеет возможность мапать коллекции элементов в том или ином виде. Добавление позиции в коллекцию при правильном маппинге должно приводить к добавлению строк в соответствующую таблицу с нужными значениями внешних ключей.
> при чем чтобы таблица была одна?
насчет одной таблицы вообще не понял. Какая одна таблица?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Pavel_Develop Автор вопроса
Что удалось нарыть:
Работают непосредственно с сущностями, которые генерит ORM с помощью Repository. А вся бизнес-логика располагается в Service. Делают маппинг с помощью AutoMapper с использованием ViewModel на стороне Presentation. Бывает Service и Repository дробят на мелкие классы Query и Command.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы