考虑到一个假设的情况,多年来一直在维护了一个古老的旧式演示库,并且通过仓促纠正和缺乏适当的建筑监督的过程,逐渐将越来越多的业务逻辑编码为它。另外,考虑一个商务舱或名称空间,该商务类或名称空间与汇编边界没有与演示文稿分开,因此能够引用类似System.Windows.Forms之类的内容而不会被迫添加参考(比简单的使用条款更清醒的动作) 。

在这样的情况下,最终将要求该UI代码使用的业务代码重新使用并不难想。对这两层重构的好方法是什么?

我很熟悉设计模式 - 至少在原则上。但是,我没有大量的实践经验,所以我不确定自己的直觉。我开始沿着为此使用策略模式的道路。这个想法是确定业务逻辑要求UI组件的地方向用户提出问题并收集数据,然后将它们封装到一组接口中。该接口上的每种方法都将包含原始工作流的面向UI的代码,然后UI类将实现该接口。

想要重复使用业务逻辑的新代码也将实现此接口,但要替换新窗口或可能预先限制或参数化答案,以最初由UI组件回答的问题。这样,可以将BIZ逻辑视为真实库,尽管具有某种尴尬的接口参数传递给了其某些方法。

这是一个体面的方法吗?我应该如何做到这一点?我将递送您的集体互联网智慧。

谢谢!

有帮助吗?

解决方案

您似乎正在采用一种良好的方法,在该方法中,您可以在设计中的具体元素之间打破依赖性,而取决于抽象(接口)。当您打破这样的依赖项时,您应该立即开始使用单元测试来覆盖您的旧版代码库并通过改进的保证来发展设计。

我找到了这本书 有效地使用旧版代码 在这些情况下是无价的。另外,如果不先查看面向对象的设计原理,请勿直接跳入模式,例如 坚硬的 原则。他们经常指导您选择系统演变的模式和决策。

其他提示

我谦虚地建议 模型–View – Controller -MVC 有很高的可能性作为解决问题的成功解决方案。如您所描述的那样,它将各种逻辑分开。

alt text

Hth

我将通过清楚地识别实体以及他们可以对其做出或可以采取的行动来处理它。然后,一一尝试开始创建独立的业务逻辑对象,为那些从UI中重构逻辑的人,使UI调用BL对象。

到那时,如果我正确理解您的方案,您将有一只装满BL对象的手,其中一部分制作了胜利表格,则需要将胜利表呼叫提升到UI层中。

然后,正如Justboo所说,我认为您将有足够的情况来开始从BL和UI中抽象控制器,并使其在MVC设计中发挥作用。

好的,鉴于您的各种评论,我会接受霍法先生的建议并扩展它。我敢肯定,您听说过严重的问题应该被分解为越来越小的工作单位,直到可以被“征服”为止。

使用该技术,与 重构 可以解决您的问题。网络上有一本书和许多有关它的信息。您现在有一个链接。该页面具有大量指向信息的链接。

作者 这本书。

因此,您可以逐步进行重构,但可以缓慢而肯定地遵循MVC的奶油味。

Hth

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top