MVC - разрешено ли представлению взаимодействовать напрямую со службами без прохождения через контроллер - PullRequest
2 голосов
/ 16 октября 2011

Моя архитектура выглядит так:

View - Controller - Services

Думайте об одном из представлений как о странице сведений о человеке. Контроллер вызывает

(Person) service.getPerson(1234)

и возвращает экземпляр Person в представление для отображения. Служба извлекает человека, взаимодействуя через веб-службу RESTFul.

Служба restful возвращает следующий ответ:

<person>
  <id>1234</id>
  <name>John Doe</name>
  <person-detail-uri>/person/1234/detail</person-detail-uri>
</person>

Приведенный выше ответ сопоставлен с классом с именем Person, который выглядит примерно так:

class Person{
    Long id;
    String name;
    String age;
    String address
}

Полный объект персонажа можно создать, получив персонажа через

/person/1234

, а затем детали через

/person/1234/detail

Предположим, что представление должно отображать сведения о человеке.

Вопрос:

Вариант A: должен ли Controller вызывать getPerson () и getPersonDetails () в службе для создания полного экземпляра Person

или

Вариант B: просто getPerson () и позвольте представлению вызвать person.getAge (), который каким-то образом (вероятно, через аспекты) вызовет выборку деталей.

Я теряю некоторую гибкость в варианте A, однако, это делает модель очень глупой, что я считаю хорошей вещью, потому что тогда плохой код не может загрязнить кэши и, следовательно, может не вызвать проблем с производительностью.

1 Ответ

2 голосов
/ 16 октября 2011

Там нет "должен", это просто зависит.IMO рискованно позволять слою представления выполнять ленивую инициализацию, потому что легко случайно запустить много запросов, не имея значения.

Кроме того, он делает уровень представления довольно интеллектуальным, поскольку теперь он контролирует инициализацию данных, а нечем изолировать выборку данных в контроллере или модели.Мне нравятся глупые взгляды, но это может быть предвзятостью, а не чем-то основанным на чисто технических аргументах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...