我正在处理具有稍微复杂行为的 .NET 3.5 表单应用程序。它用于图书库存。为了给您一个想法,工作流程将是:
- 用户输入 ISBN 代码
- 如果 ISBN 有效,检查它是否存在,
- 如果有效且存在,则显示图书详细信息并启用保存按钮,如果无效,则显示“添加图书”按钮,
- 如果无效,则显示错误,
- 最终,用户将点击“保存”,因此必须保存条目。
这是四个职责:
- 验证 ISBN,
- 支票簿存在,
- 显示图书详细信息,
- 保存新书的详细信息。
我的问题是:我应该将应用程序逻辑保留在一个 MVP 结构中,还是应该将其拆分为四个 MVP 结构,每个负责一个?
将其保留在一个 MVP 结构中
- 使模型更复杂
- 使测试设置更加复杂(每个测试都有大量设置代码来选择正确的验证器、归还书籍等,即使它们未被使用),
- 使呈现逻辑更容易理解
将其保存在单独的 MVP 结构中
- 使模型更简单,
- 为每个演示者创建更多但更简单的测试,
- 使演示者之间的交互变得复杂(我如何向演示者发出 ISBN 有效的信号,以便显示图书详细信息?)
我正在尝试 Presenter 第一原则,所以: - 保持 View 哑(所以没有像“Presenter one validated the ISBN”这样的事件), - 保持演示者无状态, - 保持模型简单(足够)
有人知道执行此操作的最佳方法是什么吗?
最佳答案
我会选择一个 Presenter,但将 ISBN 编号的验证等委托(delegate)给服务。
演示者中的这些内容用于处理正在输入的 ISBN:
public void IsbnEntered()
{
var isbn = view.Isbn;
if (isbnService.NumberIsValid(isbn))
{
var details = isbnService.RetrieveDetailsForIsbn(isbn);
if (details != null)
{
view.Display(details);
view.EnableSaveButton();
}
else
{
view.DisplayError("ISBN could not be found");
}
}
else
{
view.DisplayError("Invalid ISBN");
}
}
这里职责明确。 IsbnService 负责 ISBN 处理,View 负责显示和输入检索,Presenter 负责管理两者之间的交互。
关于c# - 半复杂页面上的 MVP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/705268/