Tôi có nghi ngờ này trong một thời gian dài ... hy vọng bất cứ ai cũng có thể khai sáng cho tôi.đa hình và các ứng dụng n-tier
Giả sử tôi có 3 lớp trong mô hình của mình.
abstract class Document {}
class Letter extends Document {}
class Email extends Document {}
và lớp dịch vụ có phương thức trả về tài liệu (thư hoặc email).
class MyService {
public Document getDoc(){...}
}
Vì vậy, trong điều khiển của tôi, tôi muốn để hiển thị các tài liệu trả về bởi MyService, và tôi muốn nó sẽ được hiển thị bằng một cái nhìn cho email và khác cho Thư. Làm cách nào một trình điều khiển có thể biết chế độ xem tài liệu nào được gọi? letterView hoặc emailView ?.
Thường thì tôi thực hiện câu lệnh if trên bộ điều khiển để kiểm tra loại tài liệu mà tầng dịch vụ nhận được ... tuy nhiên tôi không nghĩ đó là cách tiếp cận tốt nhất từ quan điểm OOP, nếu tôi thực hiện một vài boolean phương pháp Document.isLetter(), Document.isEmail() các giải pháp, về bản chất, giống nhau.
Một điều khác là ủy quyền lựa chọn chế độ xem cho Tài liệu bằng cách nào đó. một cái gì đó như:
class MyController {
public View handleSomething() {
Document document = myService.getDocument();
return document.getView();
}
}
Nhưng, omg, tại sao đối tượng mô hình của tôi phải biết gì về chế độ xem?
Bất kỳ toughts được đánh giá cao :)
Tôi sẽ bỏ phiếu này hai lần nếu có thể. Câu trả lời rất hay. –