2015-03-04 8 views
1

Прежде всего, пожалуйста, простите меня, если я получу терминологию неправильно. Терминология важна, но аналогичные понятия часто выражаются разными терминами. Предположим, что у меня есть два, недостаточно четко обозначенных «сущности» на моем уровне представления, которые должны использовать те же данные, которые были получены на уровне службы. Какими должны быть сущности?Что делать, когда данные с уровня обслуживания должны быть разделены между различными проектами представления.

Должны ли эти сущности быть как ведущими MVP? Если да, имеет ли смысл создавать две триады MVP, которые обрабатывают одни и те же данные (но, конечно, по-другому)?

Возможно, лучше иметь один презентатор и несколько видов? Или, может быть, это означает, что Модель слишком раздута и ее следует разделить на разные модели?

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

+0

Загрузите их один раз со слота «Сервис», используйте необходимые ссылки, где это необходимо. Итак, 1 модель и любое количество презентаторов и просмотров – TGlatzer

+0

, поэтому вы подразумеваете инъекцию той же модели внутри разных MVP – sebas

ответ

2

В MVP ведущий подсоединен к каждому виду (поскольку он контролирует поведение представления). Это означает, что если у вас есть несколько видов, которые существенно отличаются друг от друга, вам необходимо иметь также несколько презентаторов.

Но ни представление, ни ведущий не содержат никаких данных. Модель представляет собой представление текущего состояния данных в приложении.

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

Но если вы получаете только какие-то «сырые» данные, которые обрабатываются совсем по-другому, тогда вам, вероятно, также следует создать собственную модель для каждого презентатора/представления. Модель может ссылаться на извлеченные данные, которые могут храниться где-то на уровне службы или на объекте модели более высокого уровня.

+0

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

+1

Могут быть и другие источники, я имею в виду определения Фаулера: http://martinfowler.com/eaaDev/ModelViewPresenter.html. Вы можете видеть, что MVP был разделен им на Supervising Controller и Passive View. Понятно, что в пассивном представлении контроллер/презентатор тесно связан с представлением, так как представление ничего не делает. Но даже в Supervising Controller вы найдете это предложение от него: «[...] контроллер по-прежнему тесно связан с его экраном, нуждаясь в довольно глубоком знании деталей экрана». – jhyot