Bạn đang xây dựng một hệ thống theo dõi các công ty. Những công ty có Liên hệ. Những người liên hệ đó thường là những chuyên gia chỉ trả lời một số loại câu hỏi nhất định, chẳng hạn như Thanh toán / Thanh toán, Bán hàng, Đặt hàng và Hỗ trợ Khách hàng.
Sử dụng Thiết kế hướng tên miền và Kiến trúc hành tây, tôi đã mô hình hóa điều này với các loại sau:
- Công ty
- Có liên hệ
- Tiếp xúc
- Có loại liên hệ
- ContactType (enum)
- CompanyRep repository (giao diện)
- EFCompanyRep repository (được xác định trong một tổ hợp bên ngoài, sử dụng EntityFramework, thực hiện CompanyRep repository )
Nhóm của chúng tôi có ý kiến riêng về cách lập mô hình cơ sở dữ liệu cho ứng dụng này.
Bên A: DDDers Lean:
- Đó là công việc của Miền để xác định ContactTypes nào hợp lệ cho Liên hệ. Thêm một bảng vào cơ sở dữ liệu để xác thực rằng ContactTypes không xác định không được lưu là dấu hiệu của một miền bị rò rỉ. Nó lan truyền logic quá xa.
- Thêm một bảng tĩnh vào cơ sở dữ liệu và mã tương ứng là lãng phí. Trong ứng dụng này, cơ sở dữ liệu giải quyết một vấn đề: duy trì sự việc và trả lại cho tôi. Viết một bảng phụ và mã CRUD tương ứng là lãng phí.
- Thay đổi chiến lược cho sự kiên trì nên dễ dàng nhất có thể. Nó có nhiều khả năng thay đổi quy tắc kinh doanh đó. Nếu tôi quyết định rằng SQL Server tốn quá nhiều chi phí, tôi không muốn phải xây dựng lại tất cả các xác nhận hợp lệ mà tôi đã đặt trong lược đồ của mình.
Bên B: Những người theo chủ nghĩa truyền thống [có lẽ không phải là một tên công bằng. Các DBCentrists?]:
- Đó là một ý tưởng tồi để có dữ liệu trong cơ sở dữ liệu không có ý nghĩa nếu không đọc mã. Báo cáo và người tiêu dùng khác phải lặp lại danh sách các giá trị.
- Đó không phải là nhiều mã để tải từ điển loại db của bạn theo yêu cầu. Đừng lo lắng về nó.
- Nếu nguồn của mã này là mã chứ không phải dữ liệu, tôi sẽ phải triển khai các bit thay vì một tập lệnh SQL đơn giản khi nó thay đổi.
Không bên nào đúng hay sai, nhưng một trong số họ có thể hiệu quả hơn về lâu dài, tính thời gian phát triển cho sự phát triển ban đầu, lỗi, v.v ... Bên nào - hay có sự thỏa hiệp nào tốt hơn? Các đội khác viết kiểu mã này làm gì?