Từ ví dụ của bạn, các kho lưu trữ nên được thiết lập theo cách chúng phụ thuộc lẫn nhau. Tất cả lý do về việc thiết kế MicroService và Domain Driven Design đều áp dụng ở đây: trong một số trường hợp, mã trùng lặp được chấp nhận, làm việc với các giao diện, không phá vỡ tính tương thích trừ khi bạn thực sự phải làm, v.v.
Bây giờ theo quan điểm của tôi, một UI nên độc lập với phần phụ trợ. Vì vậy, kho dự án UI thường chứa mã UI và Trình điều khiển máy khách. Bộ điều khiển máy khách sẽ kết nối với Bộ điều khiển dịch vụ một cách trừu tượng. Họ sẽ sử dụng một dịch vụ trừu tượng khách / api được phiên bản riêng biệt với dịch vụ, để dịch vụ có thể được cập nhật mà không phá vỡ (các) ứng dụng khách (có thể có nhiều khách hàng khác nhau).
Vì vậy, một dịch vụ nên là kho lưu trữ của riêng mình. Theo quan điểm của tôi, dịch vụ này chỉ là một gói của một số logic kinh doanh đơn điểm. Vì vậy, logic nghiệp vụ thường phải tách biệt với công nghệ dịch vụ lưu trữ nó. Mặt khác, việc triển khai kho lưu trữ thường được kết nối chặt chẽ với logic nghiệp vụ, điều này có thể được tích hợp trong cùng một kho lưu trữ. Nhưng thậm chí có số dặm của bạn có thể thay đổi.
Tất nhiên, các dự án đơn giản không có khả năng thay đổi nhiều về mặt công nghệ hoặc hỗ trợ nhiều ngăn xếp, trong đó tất cả UI có thể được lưu trữ từ cùng một nguồn như phụ trợ và các dịch vụ phụ trợ thường chỉ được sử dụng bởi cùng một khách hàng, có thể được hưởng lợi nhiều hơn kho tích hợp chặt chẽ.
Trong trường hợp đó, có lẽ bạn sẽ ổn khi chỉ cần có toàn bộ dọc trong một kho lưu trữ và tập trung vào việc đảm bảo các miền chức năng của bạn hoạt động độc lập trong kho lưu trữ của riêng chúng. Sau đó, bạn vẫn có hầu hết các lợi thế của kho lưu trữ nhỏ hơn và ít chi phí khác.