Tôi hiện có một kho lưu trữ cho mọi bảng trong cơ sở dữ liệu và tôi muốn tự điều chỉnh thêm DDD bằng cách giảm chúng xuống chỉ gốc tổng hợp.
Giả sử rằng tôi có các bảng sau, User
và Phone
. Mỗi người dùng có thể có một hoặc nhiều điện thoại. Nếu không có khái niệm về gốc tổng hợp, tôi có thể làm điều gì đó như sau:
//assuming I have the userId in session for example and I want to update a phone number
List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId);
phones[0].Number = “911”;
PhoneRepository.Update(phones[0]);
Khái niệm về rễ tổng hợp dễ hiểu trên giấy hơn là trong thực tế. Tôi sẽ không bao giờ có số điện thoại không thuộc về Người dùng, vì vậy có hợp lý nếu loại bỏ PhoneRepository và kết hợp các phương pháp liên quan đến điện thoại vào UserRepository không? Giả sử câu trả lời là có, tôi sẽ viết lại mẫu mã trước đó.
Tôi có được phép có một phương thức trên UserRepository trả về số điện thoại không? Hoặc nó phải luôn trả về một tham chiếu cho Người dùng, sau đó chuyển qua mối quan hệ thông qua Người dùng để truy cập số điện thoại:
List<Phone> phones = UserRepository.GetPhoneNumbers(userId);
// Or
User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone
Bất kể tôi mua điện thoại bằng cách nào, giả sử tôi đã sửa đổi một trong số chúng, thì làm cách nào để cập nhật chúng? Hiểu biết hạn chế của tôi là các đối tượng dưới gốc phải được cập nhật thông qua gốc, điều này sẽ hướng tôi đến lựa chọn số 1 bên dưới. Mặc dù điều này sẽ hoạt động hoàn toàn tốt với Entity Framework, nhưng điều này có vẻ cực kỳ khó mô tả, bởi vì đọc mã, tôi không biết mình đang thực sự cập nhật những gì, mặc dù Entity Framework đang giữ tab trên các đối tượng đã thay đổi trong biểu đồ.
UserRepository.Update(user);
// Or
UserRepository.UpdatePhone(phone);
Cuối cùng, giả sử tôi có một số bảng tra cứu mà không phải là thực sự gắn liền với bất cứ điều gì, chẳng hạn như CountryCodes
, ColorsCodes
, SomethingElseCodes
. Tôi có thể sử dụng chúng để điền các trình đơn thả xuống hoặc vì bất kỳ lý do gì khác. Đây có phải là những kho lưu trữ độc lập không? Chúng có thể được kết hợp thành một số loại nhóm / kho lưu trữ hợp lý chẳng hạn như CodesRepository
? Hoặc là chống lại các phương pháp hay nhất.