gpt4 book ai didi

c# - 将 WinForm ClickNCode 重构为 MVP 被动 View

转载 作者:太空狗 更新时间:2023-10-29 23:42:43 26 4
gpt4 key购买 nike

我正在尝试重构现有的 Winform 应用程序以使用 MVP 被动 View 模式。应用程序的 UI、业务逻辑和数据存储代码多年来一直自由混合。看起来它要么从单独的层开始,要么有人试图将它分成层。在任何情况下,层边界都没有受到尊重。

由于表单直接操作领域对象和数据源(反之亦然),我的首要任务是创建展示者/ Controller 对象并委派这些职责。

该应用程序是一个 .NET 1.1 应用程序,我在 VS.NET 2003 中使用相当有限的重构插件进行开发。我使用现有代码的测试生成器来创建样板单元测试,然后通过并手动编辑每个测试。当然,这最终会测试代码的作用,而不一定是它应该做什么。对于新类(class),我正在做 TDD。

在进行这种规模的重构工作时有什么提示、资源和陷阱需要注意吗?

我已经掌握了一些资源:

  • 收集编程书籍; 重构PEAAWELC
  • 互联网(显然)
  • 大量含咖啡因的饮料

更新:作为一个例子,你会采取什么步骤来改变这个:

    private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
string LocalVariable;
decimal AnotherLocal;
if (!this._SomeDomainObject.SomeMethod(ClassField, out LocalVariable, out AnotherLocal))
{
MessageBox.Show("An error occurred calling method");
return;
}

this.FormControl.Value = LocalVariable;
this.AnotherFormContorl.Value = AnotherLocal;

this.AnotherPrivateMethod();
}

进入这个:

    private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
this.FormPresenter.DoSomething();
}

最佳答案

我采用的方法是先将代码移出事件处理程序。本质上,我在窗体旁边放置了一个类,它实现事件处理程序并在控件旁边保存 UI 状态。

通过这一举措,我已经非常清楚地分离了表单和与其余应用程序的实际交互,并且能够在该级别引入测试。这样做的另一个结果是 View 很快变得被动。

我在一个单独的步骤中重构了演示器(现在包含事件处理程序),并且仅在我将这些对象的所有使用从所有形式中移出后才引入域对象。

所以我的步骤是:

  1. 从逻辑中移除 UI 依赖
  2. 创建域对象(如果尚不可用)
  3. 重构演示者以使用域对象
  4. 根据您的设计选择介绍服务

在我这样做的同时,我开始在新引入的边界引入测试,以确保我不会破坏工作代码或在我正在移动的现有代码中发现错误。

关于c# - 将 WinForm ClickNCode 重构为 MVP 被动 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760961/

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