2017-06-25 20 views
5

Tôi đang xây dựng một ứng dụng Android có kiến ​​trúc sạch sử dụng mẫu MVP và mẫu kho lưu trữ ở lớp dữ liệu. Tôi hơi bối rối về các đối tượng kinh doanh. Nên có một đối tượng để sử dụng trong bản trình bày và một loại đối tượng tương tự khác trong các lớp miền/dữ liệu? Nếu có, thì ở đâu và khi nào để chuyển đổi một đối tượng sang loại khác?Cấu trúc phân lớp của kiến ​​trúc sạch Android

Trả lời

3

Mặc dù về mặt kỹ thuật có thể, thường không cần phải có một đại diện đặc biệt của các thực thể miền cho lớp trình bày.

Đôi khi bạn có thể thấy mình ở vị trí khi lớp trình bày yêu cầu nhiều thực thể được nhóm lại với nhau (ví dụ: hiển thị thông tin về hai người dùng tham gia trò chuyện). Trong những trường hợp như vậy, bạn có thể định nghĩa một trình bao bọc sẽ gộp các thực thể được yêu cầu lại với nhau. Tuy nhiên, theo kinh nghiệm của tôi, việc đóng gói như vậy hiếm khi được yêu cầu và đi kèm với một mức giá: lớp trình bày "đợi" cho tất cả dữ liệu đi kèm ngay cả khi các phần của dữ liệu này có thể đã được hiển thị cho người dùng (vd thông tin về một người dùng có thể được hiển thị ngay lập tức, nhưng thông tin về người dùng khác được tìm nạp từ máy chủ). Điều này làm giảm sự đáp ứng của ứng dụng.

Nói chung, đối với ứng dụng khách, lược đồ của đối tượng miền thường được lấy từ thông số giao diện người dùng. Do đó, nếu bạn thấy mình đang xem xét một đại diện riêng biệt của các đối tượng miền cho lớp trình bày, rất có thể xảy ra rằng một trong các vấn đề thiết kế sau đã có trong ứng dụng:

  1. Các đối tượng miền được sử dụng trong ứng dụng giống như những người sử dụng để trao đổi dữ liệu với máy chủ
  2. yêu cầu Application của phát triển, nhưng các đối tượng miền không thay đổi cho phù

Bạn luôn muốn các lớp mạng được tách riêng khỏi phần còn lại của ứng dụng. Điều này bao gồm các lược đồ đang được sử dụng trong trao đổi dữ liệu với máy chủ. Nếu các đối tượng miền của bạn thỏa mãn các ràng buộc do API của máy chủ áp đặt, nhưng không thỏa mãn các yêu cầu của lớp trình bày, thì tốt nhất nên giới thiệu logic "dịch" giữa lớp mạng và phần còn lại của ứng dụng.

Nếu yêu cầu của ứng dụng phát triển, nhưng đối tượng miền không được cập nhật cho phù hợp, thay vì có biểu diễn riêng cho lớp trình bày, tốt nhất là chỉ xem xét thiết kế và cập nhật toàn bộ ứng dụng theo yêu cầu hiện tại.