使传统的直接win.forms应用程序代码更加清晰

时间:2010-06-17 13:54:01

标签: winforms language-agnostic architecture refactoring

我有一个传统的win.forms应用程序,用非常简单的方法编写,其中表单在UI事件上与DAL进行通信。例如,有文本框:登录/密码,按钮 - “登录”和实现业务逻辑的点击处理程序(DAL被要求通过id /密码获取用户,如果不是null - 比显示下一个屏幕,如果为null - 显示“重试屏幕”)。

我无法从头开始重写它(在MVP或View / Document模式中),我只想将业务逻辑与处理程序分开:抓住与DAL通信的现有处理程序代码,并将其从UI处理程序中分组。

许多表单由数十个用户控件组成,而且通常不清楚谁负责业务逻辑。有时它是UI控件。但有时它是一个表单,正在监听自定义UI控件事件,然后实现业务逻辑。

如果我将业务逻辑分开,谁应该负责调用业务逻辑控制器?表单,用户控件,表单和用户控件同时?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

与大多数重构一样,请采取一些小步骤。

首先将代码解压缩到新方法。 因此,除了btnLogin_Click事件中的所有登录代码之外,您只需要一个名为LogUserIn()的方法或类似的东西。

对某些(或所有)事件处理程序完成此操作后,您可能会开始看到一些常见的趋势。也许有一个相对类似的注销。现在你有了两个新类的方法。

然后,您可以在事件处理程序中开始使用该类。像UserData.Login(name,pw)和UserData.Logout(name)

这样的东西

不要试图一次完成所有事情。进行更改,验证其有效,进行其他更改,验证其是否有效。

请记住,你不必在门外进行完美的重构,即使增量变化听起来像是一个巨大的改进。

答案 1 :(得分:1)

我的主观意见是尽可能多地解耦。将所有业务对象代码粘贴到自己的库或类中,将与业务对象相关的所有行为放在该类中。然后允许您的UI代码调用。如果您需要在通信之间等待(例如搜索大型数据库以获取登录凭据),请暂停UI,直到它听到业务对象的响应。这种方法的优点是理论上可以在将来分发它。让服务器运行后端代码,UI只是发送请求和等待响应。虽然也许我误解了你的问题?