Я действительно ищу больше подтверждения здесь моего понимания MVP, прежде чем подойти к руководству проекта по рефакторингу основных частей нашего приложения ...
В настоящее время у нас есть расширенный паттерн MVP, в котором мы имеемследующие проекты:
- Entity (Определяет POCO)
- Модель (Определяет конфигурации уровня данных (сначала код EF - здесь не важно))
- Задача (всебизнес-логика в упорядоченной группировке)
- Спецификатор Presenter (для страницы (или типа страницы), вызывает задачи, определяет и работает со всеми интерфейсами View)
- View (в форме различных веб-сайтов (внутренняя, внешняя))
В настоящее время в слое View я часто вижу код, который работает непосредственно с сущностями, поэтому страница ASPX (может быть php, что угодно), которая должна отображать список записей, делаетвот так:
public interface IEntityList
{
ICollection<Entity> MyEntities {get;set;}
event EventHandler OnReportRunning;
}
public class EntityList : IEntityList
{
public ICollection<Entity> MyEntities {get;set;}
private void RenderEntities()
{
OnReportRunning(this, null);
if (MyEntities != null)
{
ArrayList entityList= new ArrayList();
foreach (var entity in Myentities.OrderBy(e=>e.Field))
{
var formatedEntity = new {FullName = String.Format("{0}, {1}",
entity.LastName, entity.FirstName), UserEmail = entity.Email};
entityList.Add(formatedEntity);
}
ddlEntities.DataSource = entityList;
ddlEntities.DataBind();
}
}
}
Я считаю, что это нарушает намерение уровня презентатора.Я думаю, что представление должно отображать DropDownList
(ddlEntities) или любые другие элементы управления, которые оно имеет, и презентатор должен быть точкой, в которой останавливается ВСЕ знание слоя Entity.
И, таким образом, мой вопрос - СЛЕДУЕТСлой View (V) архитектуры MVP (возможно, это MPV) имеет любое знание модели (M)?Или я прав, полагая, что единственная работа, которую должен выполнять слой View, - это прямая реакция на события со стороны элементов управления, и что вся реальная презентационная работа (связывание, форматирование с использованием сущностей и т. Д.) Должна выполняться на уровне презентатора, и чтоПредполагается, что уровень докладчика должен быть в курсе фактического уровня просмотра (IIS против Apache против Mobile и т. Д.)?