繁体   English   中英

如何避免在两个类似的WinForms上复制逻辑?

[英]How to avoid duplicating logic on two similar WinForms?

我有两种形式,形式A和形式B.这些形式的外观必须不同,但它们有很多逻辑。 问题是这个逻辑与外观有关(按钮点击验证,被触发的事件等)。 例如,我有一个名称字段,当按下保存按钮时,我需要触发一个事件,导致父窗体验证记录名称以避免重复。 两种形式都需要这种逻辑,但它们的保存按钮位于不同的位置,发生错误时显示的工具提示也需要出现在不同的位置。 这只是一个例子,但是有没有人知道我可以避免在这里复制和粘贴代码的方法? 也许我错过了一些明显的东西......

您可以创建一个包含两种形式的数据的对象,并将验证逻辑放在该对象中。 表示层应使用输入的数据填充该对象,请求对象验证自身,然后以特定于表单的方式处理验证错误。

如果公共逻辑与UI相关,则需要使用所需的逻辑创建自己的自定义表单类(从Form类继承)。 那么你需要做的就是在表单中继承该类。

如果公共逻辑与UI相关性较小,则创建一个内部类,该类封装了公共逻辑并从两种形式调用它。

您需要在2个视图和共享模型之间添加Controller。 这样你只需要做:myController.save(); 而是必须调用模型对象将它们保存在两个winform中。

我可以想到几种方法来重构这些形式来共享逻辑。 您可以结合使用其中一个或多个:

  1. 创建包含业务对象的UI特定“bean”对象,并添加表单之间共享的其他功能。 这个bean可以做一些事情,比如创建工具提示,协助验证,事件等。
  2. 创建一个包含常用函数的帮助器类。 概括两个表单上的逻辑以调用此辅助类以获取常用函数。
  3. 增强业务对象以进行验证。 我并不是说你的BO应该知道任何UI,但他们可以/应该强制执行业务规则。 这可能会将一些验证逻辑从表单中拉出并进入一个公共位置。
  4. 创建特定于您正在使用的数据类型的自定义控件,并在这两个表单上使用这些控件。

您可能还想看看CSLA框架 ,我在过去的项目中非常成功地使用它来帮助减少不同UI之间重复代码的数量。 它利用了.NET的数据绑定功能,但我认为不需要使用数据绑定来充分利用框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM