gpt4 book ai didi

oop - 在 MVP 中, View (又名页面)是否应该知道模型的任何信息?

转载 作者:行者123 更新时间:2023-12-04 22:29:36 27 4
gpt4 key购买 nike

在我与项目负责人就重构我们应用程序的主要部分进行接触之前,我真的希望更多地在这里验证我对 MVP 的理解...

我们目前有一个扩展的 MVP 模式,我们有以下项目:

  • 实体(定义 POCO)
  • 模型(定义数据层配置(EF 代码优先 - 此处无关紧要))
  • 任务(有序分组中的所有业务逻辑)
  • Presenter(特定于页面(或页面类型),调用任务,定义并使用所有 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();
}
}
}

我认为这违反了展示层的意图。我认为 View 应该公开 DropDownList (ddlEntities) 或它拥有的任何其他控件,并且演示者应该是实体层的所有知识停止的点。

因此我的问题 - MVP(也许应该是 MPV)架构的 View (V) 层是否应该对模型 (M) 有任何知识?或者我是否认为 View 层应该做的唯一工作是对来自控件的事件的直接 react ,并且所有真正的表示工作(绑定(bind)、涉及实体的格式化等)都应该在展示层完成,并且Presenter 层应该强烈了解实际的 View 层(IIS vs. Apache vs Mobile 等)?

最佳答案

您对 View 中的“唯一事件”提出的建议是 Passive View MVP的味道, 我更喜欢 Supervising Controller ,除了演示者中的数据绑定(bind)之外,您可以在其中执行所有操作。我通常有类似 view.BindData() 的东西,其中 View 向演示者询问数据并绑定(bind)它(当然,演示者控制何时调用 BindData() ,因此它确保在调用之前有一些数据要绑定(bind))。

我还认为在 95% 的情况下,事件通信而不是直接调用呈现器方法是一种矫枉过正。

关于oop - 在 MVP 中, View (又名页面)是否应该知道模型的任何信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com