Вы строите систему, которая отслеживает компании. Эти компании имеют контакты. Эти контакты часто являются специалистами, которые отвечают только на некоторые типы вопросов, таких как выставление счетов / оплата, продажи, заказы и поддержка клиентов.
Используя доменно-управляемый дизайн и архитектуру Onion, я смоделировал это со следующими типами:
- Компания
- Имеет контакты
- контакт
- Имеет типы контактов
- ContactType (enum)
- CompanyRepository (интерфейс)
- EFCompanyRepository (определяется во внешней сборке, использует EntityFramework, реализует CompanyRepository)
Наша команда разделила мнение о том, как смоделировать базу данных для этого приложения.
Сторона A: Lean DDDers:
- Задача домена - определить, какие контактные типы действительны для контакта. Добавление таблицы в базу данных для проверки того, что неизвестные типы контактов не сохранены, является признаком домена с утечкой. Это распространяет логику слишком далеко.
- Добавление статической таблицы в базу данных и соответствующего кода расточительно. В этом приложении база данных решает одну проблему: сохраните вещь и верните ее мне. Написание дополнительной таблицы и соответствующего кода CRUD расточительно.
- Изменение стратегии для настойчивости должно быть как можно проще. Это более вероятно, чтобы изменить эти бизнес-правила. Если я решу, что SQL Server стоит слишком дорого, мне не нужно будет перестраивать всю проверку, которую я включил в свою схему.
Сторона Б: Традиционалисты [это, вероятно, не честное имя. DBCentrists?]:
- Это плохая идея иметь данные в базе данных, которые не имеют смысла без чтения кода. Отчеты и другие потребители должны сами повторить список значений.
- Это не так много кода, чтобы загрузить словари типа БД по требованию. Не беспокойся об этом.
- Если источником этого является код, а не данные, мне придется развертывать биты вместо простого сценария SQL при его изменении.
Ни одна из сторон не является правильной или неправильной, но одна из них, вероятно, более эффективна в долгосрочной перспективе, считая время разработки для начальной разработки, ошибок и т. Д. С какой это стороны - или есть лучший компромисс? Что делают другие команды, пишущие этот стиль кода?