Ви будуєте систему, яка відстежує компанії. Ці компанії мають контакти. Ці контакти часто є фахівцями, які відповідають лише на певні типи питань, наприклад, виставлення рахунків / платежів, продажів, замовлення та підтримка клієнтів.
Використовуючи дизайн, керований доменом та архітектуру Onion, я моделював це за допомогою таких типів:
- Компанія
- Має контакти
- Контактна інформація
- Має типи контактів
- ContactType (enum)
- CompanyRepository (інтерфейс)
- EFCompanyRepository (визначений у зовнішній збірці, використовує EntityFramework, реалізує CompanyRepository)
У нашої команди є думка щодо того, як моделювати базу даних для цього додатка.
Сторона A: Lean DDDers:
- Завдання Домену визначає, які Контактні типи дійсні для Контакту. Додавання таблиці до бази даних для перевірки того, що невідомі типи контактів не збережені, є ознакою непрохідного домену. Це занадто далеко поширює логіку.
- Додавання статичної таблиці до бази даних та відповідного коду є марним. У цьому додатку база даних вирішує одну проблему: зберігайте річ і поверніть її мені. Написання додаткової таблиці та відповідного коду CRUD марно.
- Зміна стратегії стійкості має бути якомога простішою. Більше шансів змінити ці правила бізнесу. Якщо я вирішив, що SQL Server коштує занадто дорожче, мені не хочеться відновлювати всю перевірку, яку я вклав у свою схему.
Сторона B: Традиціоналісти [це, мабуть, не чесна назва. DBCentrists?]:
- Дуже погано мати дані в базі даних, які не мають сенсу без читання коду. Звіти та інші споживачі повинні самі повторювати перелік цінностей.
- Це не так багато коду для завантаження словників типу db на вимогу. Не хвилюйся з цього приводу.
- Якщо джерелом цього є код, а не дані, мені доведеться розгорнути біти замість простого сценарію SQL, коли він змінюється.
Жодна сторона не є правильною чи неправильною, але одна з них, ймовірно, є більш ефективною в довгостроковій перспективі, враховуючи час розробки для початкової розробки, помилки і т. Д. Яка сторона це - чи є кращий компроміс? Що роблять інші команди, що пишуть цей стиль коду?