2010-08-13 126 views
4

考虑到一个假设的情况,即过去几年一直存在一个旧的,遗留的演示库,并且通过快速更正和缺乏适当的架构监督,逐渐将更多的业务逻辑编入其中。或者,考虑一个业务类或命名空间,它不是通过汇编边界与演示分离,因此能够引用诸如System.Windows.Forms之类的东西,而不必强制添加引用(比简单的使用子句更加清醒的操作) 。处理混合业务和表示代码的最佳方法?

在这样的情况下,它不是不可想象的,通过这个UI代码中使用的业务代码最终会在重复使用被调用。为了实现这个目的,重构这两层的好方法是什么?

我对设计模式非常熟悉 - 至少在原则上反正。但是,我没有一整套实践经验,所以我对自己的直觉有点不确定。我已经开始沿着使用策略模式的道路。这个想法是确定业务逻辑调用UI组件的位置,以向用户提出问题并收集数据,然后将这些数据封装到一组接口中。该接口上的每个方法都将包含来自原始工作流的面向UI的代码,然后UI类将实现该接口。

想要重用有问题的业务逻辑也将实现这个接口,但是替代无论是新窗口或可能的pre-fab或参数回答最初由UI组件回答这些问题的新代码。这样,biz逻辑可以被视为一个真正的库,虽然有些尴尬的接口参数传递给它的一些方法。

这是一个体面的方法吗?我应该如何更好地处理这个问题?我会顺从你的集体互联网智慧。

谢谢!

+0

谢谢你让我今天学习一个新词。我仍然不确定我是否知道混合的含义,但是我将立即开始使用它! – 2010-08-13 20:02:27

+0

是您的基本问题“我如何从UI中存在的一堆业务逻辑创建业务逻辑层?” ? – 2010-08-13 20:04:59

+0

我对融合的印象是把两件事合并为一,通常带有错误/否定的基调。很高兴你喜欢我的文辞!但是,是的,基本问题并不是真正的“如何制作三层”,而是从实际的角度来看,“我该如何解决这个问题”。 – bwerks 2010-08-13 20:49:16

回答

2

你似乎都采取了一种很好的方法,其中你打破混凝土构件之间的依赖关系在你的设计,而不是依赖于抽象(接口)。当你打破这样的依赖关系时,你应该立即开始使用单元测试来覆盖你的遗留代码库,并通过更好的保证来改进设计。

我发现这本书Working Effectively with Legacy Code是在这些情况下非常宝贵的。另外,不要在没有首先查看面向对象设计原则的情况下跳入模式,如SOLID原则。他们经常指导您选择有关系统演变的模式和决策。

+0

我习惯于在.NET3.5 +环境中工作,其中Moq作为单元测试资源提供。这个代码库是基于C#2.0/.NET3.0的,然而,Moq并不存在那么久。我以前曾尝试过犀牛,但它的功能强大得可能......我真的很讨厌它。还有其他的选择吗? – bwerks 2010-08-13 21:22:28

+0

此外,还可获得+1优秀书籍/阅读推荐。谢谢! – bwerks 2010-08-13 21:31:44

+1

@bwerks:对不起,在这个时候,我没有任何建议来建立一个好的模拟框架。看起来像一个SO的问题。 – 2010-08-23 16:13:34

3

我谦恭地建议Model–View–Controller - MVC有很高的概率作为一个成功的解决您的问题。它按照您的描述分离各种逻辑。

alt text

HTH

+0

不幸的是,这个特殊的组件起源于MVC;不幸的是,最终的结果是,视图中出现了一吨的biz逻辑,并且该模型充满了在处理过程中用于正确/不使用MessageBox的过程。如果你得到我的语法漂移,而不是M,V,C,那么它就是M/V/C。 – bwerks 2010-08-13 21:35:45

1

我会被明确确定的实体,他们可以做或者可以做他们的行动接近它。然后逐一尝试开始创建独立的业务逻辑对象,以便将这些逻辑重构为UI以外的UI,从而调用BL对象。

在这一点上,如果我理解您的方案正确,你将有一个满手BL的对象,有些部分是使其赢得形成电话,赢形成接听的话需要被提升出到UI层。

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

+0

Jimmy Hoffa呵呵?吉米,你在哪里?这不是在体育场下,这是肯定的。 :-D – JustBoo 2010-08-13 20:16:12

0

好的,考虑到您的各种意见,我会接受霍法先生的建议并予以延伸。我相信你们听到的难题应该被分解成更小的工作单位,直到他们能够被“征服”。

使用该技术,加上方法Refactoring可以解决您的问题。网上有一本书和大量的信息。你现在有一个链接。该页面包含大量的信息链接。

该书的author还有一个链接。

所以,你一步一步缓慢但肯定地重构MVC的奶油善良。

HTH

相关问题