在我向项目负责人提出重构应用程序的主要部分之前,我真的更希望你能验证我对MVP的理解...
目前,我们采用了扩展的MVP模式,其中包含以下项目:
- 实体(定义POCOs)
- 模型(定义数据层配置(EF code first - 并不重要))
- 任务(所有业务逻辑按顺序分组)
- 主持人(特定于页面(或页面类型),调用任务,定义并与所有视图接口一起使用)
- 视图(以不同的网站形式呈现(内部,外部))
目前,在视图层中,我经常看到直接与实体相关的代码,因此,像这样显示条目列表的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();
}
}
}
我认为这违反了Presenter层的意图。我认为View应该暴露DropDownList(ddlEntities)或其他控件,Presenter应该是Entity层所有知识停止的地方。
因此我的问题是 - MVP架构中的View(V)层是否应该具有任何对模型(M)的了解?或者我是否正确地认为View层应该只处理来自控件的事件反应,并且所有真正的呈现工作(涉及实体的绑定、格式化等)都应该在Presenter层完成,并且Presenter层应该强烈了解实际的View层(IIS vs. Apache vs Mobile等)?