Tôi tin rằng tôi cấu trúc các dự án của mình giống như nhiều người làm. Bạn có một lớp dữ liệu (DAO's), lớp dịch vụ (dịch vụ) và lớp trình bày (Spring MVC, Wicket, ...).Tách dịch vụ -> Đối tượng kinh doanh?
Thông thường dịch vụ bắt đầu khá đơn giản và 'ngắn'. Dần dần, dịch vụ phải hỗ trợ ngày càng nhiều trường hợp sử dụng cho đến sau một thời gian nó trở thành một lớp lớn với nhiều dòng và phương thức và khó đọc và duy trì. Vào thời điểm đó bạn có thể quyết định gắn bó với nó hoặc bắt đầu tái cấu trúc đó là một công việc cồng kềnh và 'nguy hiểm' có thể mất nhiều công sức.
Tôi đang tìm một giải pháp về cách ngăn chặn sự cần thiết cho việc tái cấu trúc trong tương lai.
Một cách tiếp cận có thể chia nhỏ các dịch vụ của bạn trong một số dịch vụ phụ và làm cho dịch vụ ban đầu của bạn trở thành mặt tiền dịch vụ. Vì vậy, ví dụ, thay vì một UserService lớn, bạn có thể có một UserServiceFacade mà đại biểu các cuộc gọi đến PasswordService, RegistrationService, ....
Nó không phải là một giải pháp xấu tôi nghĩ nhưng tôi không quá nhiệt tình về nó bởi vì:
- khó khăn để xác định trước trong đó subservices chia công việc; nếu bạn missjudged, bạn vẫn có thể cần te aftwards Refactor hoặc có một dịch vụ chỉ với một phương pháp ví dụ
- tái sử dụng Logic kinh doanh có thể khó khăn hơn nếu ví dụ PasswordService và RegistrationService yêu cầu chức năng chung
giải pháp khác có thể được sử dụng đối tượng kinh doanh mà (trong sự hiểu biết của tôi) cũng có thể được nhìn thấy một subservices nhưng sau đó một cho mỗi UseCase cụ thể, vì vậy bạn có thể có BO như CreateUserBO, CheckPasswordBO, DeleteUserBO, ....
tôi nhiệt tình hơn một chút về cách tiếp cận này bởi vì, trong opnion của tôi, nó cung cấp khá nhiều ưu điểm:
- BO chính nó là rất có thể đọc được và chỉ thực hiện với nó là hợp đồng đòi hỏi nó để làm; tất cả các phần còn lại có thể được giao cho khác BO, một BO đơn sẽ ngắn và đến điểm
- Dễ dàng để tái sử dụng chức năng
- dễ dàng hơn để thay đổi/chuyển thi hành một Usecase nhất định: chỉ cần tiêm thực hiện khác với mùa xuân
- dễ dàng hơn để kiểm tra: chỉ cần kiểm tra để Usecase cụ thể, các đoàn đến khác BO có thể được chế giễu
- Cộng tác: ít xung đột nếu số nhà phát triển làm việc trên khác nhau BO của sau đó khi họ làm việc trên cùng một dịch vụ
tôi làm tuy nhiên cũng thấy một số nhược điểm có thể xảy ra:
- một chút thêm công việc (trong tương lai loại ít nhất) Nhiều hơn nữa
- lớp mà có thể làm giảm khả năng đọc của dự án của bạn?
- lớp thêm một trừu tượng: thêm một bước là cần thiết để tìm việc thực hiện thực tế của một Usecase
Câu hỏi hay đúng hơn là câu hỏi (xin lỗi) là:
- Are Business Objects giải pháp lý tưởng cho vấn đề này?
- Bạn có đồng ý với những ưu điểm/nhược điểm của BO mà tôi liệt kê ở trên và/hoặc bạn có thấy khác không?
- Có các giải pháp nào khác (tốt) để ngăn chặn các dịch vụ lớn làm hỏng ngày của bạn không?
+1 câu hỏi hay. – Nilesh