У меня есть это сомнение в течение долгого времени... надеюсь, что кто-то может рассказать мне.
Предположим, что у меня есть 3 класса в моей модели.
abstract class Document {}
class Letter extends Document {}
class Email extends Document {}
и класс обслуживания с методом, который возвращает документ (либо письмо, либо электронную почту).
class MyService {
public Document getDoc(){...}
}
Итак, в моем контроллере я хочу отобразить Документ, возвращенный MyService, и я хочу, чтобы он отображался, используя представление для электронной почты и другое для письма. Как контроллер может узнать, какой вид документа вызывается? letterView или emailView?.
Часто я делаю инструкцию if на контроллере, чтобы проверить тип документа, полученный уровнем обслуживания... однако я не думаю, что это лучший подход с точки зрения ООП, также если я реализую несколько логических методы Document.isLetter(), Document.isEmail(), по сути, это решение.
Еще одна вещь - как-то делегировать выбор представления в Документ. что-то вроде:
class MyController {
public View handleSomething() {
Document document = myService.getDocument();
return document.getView();
}
}
Но, omg, почему мои объекты модели должны ничего знать о представлении?
Любые нагрудные знаки оценены:)