DDD: dịch vụ chứa hai kho lưu trữ


8

Liệu nó có đúng cách để có hai kho lưu trữ bên trong một dịch vụ và nó sẽ là một ứng dụng hoặc dịch vụ miền?

Giả sử tôi có một đối tượng Hành khách nên chứa đối tượng Hộ chiếu (id chính phủ). Tôi đang nhận Hành khách từ Hành khách. PasbahRep repository tạo yêu cầu đến máy chủ và lấy dữ liệu (json) so với phân tích dữ liệu nhận được và lưu trữ bên trong kho lưu trữ.

Tôi đã nhầm lẫn vì tôi muốn lưu trữ Hộ chiếu dưới dạng Thực thể và đặt nó vào PassportRep repository nhưng tất cả thông tin về mật khẩu chứa bên trong json hơn tôi nhận được ở trên.

Tôi đoán rằng tôi nên tạo một Dịch vụ hành khách sẽ bao gồm Hành khách và Kho lưu trữ hộ chiếu với một số phương thức như removePassport, addPassport, getAllPassengervà v.v.

CẬP NHẬT:

Vì vậy, tôi đoán rằng cách tốt hơn là đại diện cho Hộ chiếu là VO và lưu trữ tất cả hộ chiếu trong tổng hợp Hành khách. Tuy nhiên, có một câu hỏi khác: Tôi nên đặt phương thức ở đâu (phương thức gọi máy chủ api) cho hộ chiếu của hành khách quản lý. Tôi nghĩ rằng nơi tốt hơn là như vậy trong tổng hợp hành khách.

Câu trả lời:


7

Không có gì lạ khi một dịch vụ có hai kho lưu trữ, nhưng nó thường là một gợi ý về một thiết kế kém. Thật đáng để xem xét, để xem liệu bạn có thể cải thiện thiết kế của mình không, nhưng nếu bạn nhìn và bạn không thể cải thiện nó, bạn không nên lo lắng quá nhiều.

Trong trường hợp của bạn, tôi nghĩ bạn cần xem xét khái niệm Uẩn trong DDD.

Tập hợp là nhóm của những thứ thuộc về nhau. Một gốc tổng hợp là thứ giữ tất cả chúng lại với nhau.

Nếu Hành khách và Hộ chiếu không thuộc về nhau, tôi không biết điều gì. Tổng hợp gốc của bạn trong trường hợp này rõ ràng phải là Hành khách.


Vâng tôi biết về Uẩn chắc chắn. Ok nếu Hành khách là Tổng hợp và chứa tất cả hộ chiếu của hành khách, tôi nên đặt các phương thức (phương thức gọi máy chủ api) để thêm hoặc xóa hộ chiếu, bên trong đối tượng Hành khách?
tikhop

@tikhop: Khó có thể biết chắc chắn nếu không có mã của bạn, nhưng tôi tưởng tượng như vậy, vâng.
pdr

0

Tôi hoàn toàn đồng ý với @pdr rằng bạn không cần phải tự trách mình vì có thêm một kho lưu trữ trong dịch vụ của bạn.

Về các phương thức hộ chiếu, chẳng hạn như addPassport, tôi nghĩ rằng họ nên ở trong Dịch vụ hành khách và Kho lưu trữ hộ chiếu. Cái gì đó như:

public class PassengerService : ServiceBase<Passenger>, IPassengerService {

    private readonly IPassportRepository _passport_repository;
    private readonly IPassengerRepository _pass_repository

    public PassengerService(IPassportRepository passport_repository,     IPassengerRepository passenger_repository) {
        ...

    }


   public void removePassport(...) {
       _passport_repository.remove(...);

   }


}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.