Budujesz system, który śledzi firmy. Te firmy mają kontakty. Kontakty te są często specjalistami, którzy odpowiadają tylko na niektóre rodzaje pytań, takie jak fakturowanie / płatność, sprzedaż, zamówienia i obsługa klienta.
Używając projektu opartego na domenie i architektury cebuli, modelowałem to z następującymi typami:
- Firma
- Ma kontakty
- Kontakt
- Ma typy kontaktów
- ContactType (wyliczenie)
- CompanyRepository (interfejs)
- EFCompanyRepository (zdefiniowany w zewnętrznym zestawie, używa EntityFramework, implementuje CompanyRepository)
Nasz zespół ma podzielone zdanie na temat modelowania bazy danych dla tej aplikacji.
Strona A: Lean DDDers:
- Zadaniem domeny jest określenie, które typy kontaktów są ważne dla kontaktu. Dodanie tabeli do bazy danych w celu sprawdzenia, czy nieznane typy ContactTes nie zostały zapisane, jest oznaką nieszczelnej domeny. Zbyt daleko rozprzestrzenia logikę.
- Dodawanie tabeli statycznej do bazy danych i odpowiedniego kodu jest marnotrawstwem. W tej aplikacji baza danych rozwiązuje jeden problem: utrwal to i zwróć mi. Pisanie dodatkowej tabeli i odpowiedniego kodu CRUD jest marnotrawstwem.
- Zmiana strategii uporczywości powinna być jak najłatwiejsza. Bardziej prawdopodobne jest, że zmieni to reguły biznesowe. Jeśli zdecyduję, że SQL Server kosztuje zbyt dużo, nie chcę odbudowywać całego sprawdzania poprawności, które wprowadziłem do mojego schematu.
Strona B: Tradycjonaliści [to prawdopodobnie nie jest uczciwa nazwa. DBCentrists?]:
- To zły pomysł, aby mieć dane w bazie danych, które nie mają sensu bez czytania kodu. Raporty i inni konsumenci muszą sami powtórzyć listę wartości.
- Nie jest tak dużo kodu, aby ładować słowniki typu db na żądanie. Nie martw się o to.
- Jeśli źródłem tego jest kod, a nie dane, będę musiał wdrożyć bity zamiast prostego skryptu SQL, gdy się zmieni.
Żadna ze stron nie ma racji ani nie ma racji, ale jedna z nich jest prawdopodobnie bardziej wydajna na dłuższą metę, licząc czas rozwoju początkowego rozwoju, błędów itp. Po której stronie - czy jest lepszy kompromis? Co robią inne zespoły piszące ten styl kodu?