Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理合并的业务和演示代码的最佳方法?_C#_Design Patterns_Refactoring_Strategy Pattern_Three Tier - Fatal编程技术网

C# 处理合并的业务和演示代码的最佳方法?

C# 处理合并的业务和演示代码的最佳方法?,c#,design-patterns,refactoring,strategy-pattern,three-tier,C#,Design Patterns,Refactoring,Strategy Pattern,Three Tier,考虑到一个假设的情况,一个旧的、遗留的表示库多年来一直在维护,并且通过一个仓促纠正和缺乏适当的体系结构监督的过程逐渐将越来越多的业务逻辑编码到其中。另一方面,考虑一个业务类或命名空间,它不是由程序集边界与演示文稿分离的,因此可以引用Sosial.Windows窗体之类的东西而不必添加引用(比简单的使用子句更醒目的动作)。 在这样的情况下,这个UI代码使用的业务代码最终会被调用以供重用,这并不是不可想象的。为了实现这一点,重构这两个层的好方法是什么 我大致熟悉设计模式——至少在原则上是这样。然而,

考虑到一个假设的情况,一个旧的、遗留的表示库多年来一直在维护,并且通过一个仓促纠正和缺乏适当的体系结构监督的过程逐渐将越来越多的业务逻辑编码到其中。另一方面,考虑一个业务类或命名空间,它不是由程序集边界与演示文稿分离的,因此可以引用Sosial.Windows窗体之类的东西而不必添加引用(比简单的使用子句更醒目的动作)。 在这样的情况下,这个UI代码使用的业务代码最终会被调用以供重用,这并不是不可想象的。为了实现这一点,重构这两个层的好方法是什么

我大致熟悉设计模式——至少在原则上是这样。然而,我没有太多的实践经验,所以我有点不确定我的直觉。我已经开始在这方面使用策略模式。其思想是确定业务逻辑调用UI组件向用户提问和收集数据的位置,然后将这些位置封装到一组接口中。该接口上的每个方法都将包含来自原始工作流的面向UI的代码,然后UI类将实现该接口

想要重用所讨论的业务逻辑的新代码也将实现此接口,但可以替换新的窗口,也可以替换最初由UI组件回答的问题的预加工或参数化答案。通过这种方式,biz逻辑可以被视为一个真正的库,尽管传递给它的一些方法的接口参数有些笨拙

这是一个体面的方法吗?我该怎么做才好呢?我将听从你们集体的互联网智慧

谢谢

我谦恭地建议,成功解决您的问题的可能性很高。它分离了各种逻辑,正如您所描述的


HTH

您似乎采取了一种很好的方法,您打破了设计中具体元素之间的依赖关系,转而依赖于抽象(接口)。当您打破这样的依赖关系时,您应该立即开始使用单元测试来覆盖遗留代码库,并以更好的保证改进设计


我发现这本书在这种情况下是非常宝贵的。另外,在没有先了解面向对象设计的原则之前,不要直接进入模式,比如原则。它们通常指导你选择模式和决定系统的发展。

我会通过明确识别实体和它们可以做或可以做的动作来处理它。然后,一个接一个地尝试为那些从UI重构逻辑的人创建独立的业务逻辑对象,使UI调用BL对象

在这一点上,如果我正确理解您的场景,您将拥有一手完整的BL对象,其中一部分进行win forms调用,win forms调用将需要升级到UI层


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

好的,考虑到您的各种意见,我将采纳Hoffa先生的建议并扩展它。我相信你已经听说过困难的问题应该被分解成更小的工作单元,直到它们被“征服”

使用这种技术,再加上使用的方法,可以解决您的问题。网上有一本书和很多关于它的信息。你现在有了一个链接。该页面有大量指向信息的链接

这本书的另一个链接

因此,您需要一步一步地重构,缓慢但肯定地达到MVC的奶油般的优点


HTH

谢谢你今天让我学了一个新单词。我仍然不确定我是否知道合并意味着什么,但无论如何,我将立即开始使用它!您的基本问题是“如何从UI中存在的一堆业务逻辑创建业务逻辑层?”?我对合并的印象是将两件事合并为一件,通常带有错误/否定的语气。很高兴你喜欢我的措辞!但是,是的,基本的问题不是“我如何制作三层结构”,而是从实际的角度来看“我如何修复这个混乱”。吉米·霍法,嗯?吉米,你在哪里?这肯定不是在体育场下面-我习惯于在.NET3.5+环境中工作,其中Moq作为单元测试资源可用。然而,这个代码库是基于C#2.0/.NET3.0的,Moq在很久以前就不存在了。我以前试过rhino,但它可能很好,很强大……我真的很讨厌它。还有其他选择吗?@bwerks:对不起,目前我没有任何关于好的模拟框架的建议。很遗憾,这个特殊的组件起源于MVC;不幸的是,最终的结果是,视图中有一公吨的业务逻辑,并且模型中充斥着“是/否”消息框,用于在处理过程中纠正错误。如果你明白我的语法大意的话,它不是M,V,C,而是M/V/C。