c# - 处理合并的业务和表示代码的最佳方式?

标签 c# design-patterns refactoring strategy-pattern three-tier

考虑一个假设情况,其中一个旧的、遗留的表示库多年来一直在维护,并且通过仓促更正和缺乏适当的架构监督的过程逐渐将越来越多的业务逻辑编码到其中。或者,考虑一个业务类或命名空间,它没有通过程序集边界与表示分离,因此能够引用类似 System.Windows.Forms 的东西而不必被迫添加引用(比简单的 using 子句更清醒的 Action ) .

在这种情况下,不难想象该 UI 代码使用的业务代码最终会被调用以进行重用。什么是将两层分开重构以实现这一点的好方法?

我对设计模式略微熟悉——至少在原则上是这样。但是,我没有大量的实践经验,所以我对自己的直觉有些不确定。为此,我已经开始使用策略模式。这个想法是确定业务逻辑调用 UI 组件以询问用户问题和收集数据的位置,然后将它们封装到一组接口(interface)中。该接口(interface)上的每个方法都将包含原始工作流中面向 UI 的代码,然后 UI 类将实现该接口(interface)。

想要重用有问题的业务逻辑的新代码也将实现此接口(interface),但替换为新窗口或可能是对最初由 UI 组件回答的问题的预制或参数化答案。这样,业务逻辑就可以被视为一个真正的库,尽管它的一些方法传递了一个有点笨拙的接口(interface)参数。

这是一个不错的方法吗?我应该如何更好地解决这个问题?我会尊重你们在互联网上的集体智慧。

谢谢!

最佳答案

虚心建议Model–View–Controller - MVC很有可能成功解决您的问题。正如您所描述的,它将各种逻辑分开。

alt text

HTH

关于c# - 处理合并的业务和表示代码的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480291/

相关文章:

language-agnostic - 哪些层应该使用领域模型?

.net - 从.NET代码中删除未使用的局部变量

database - Entity Framework 5 迁移中不可能进行数据库重构吗?

c# - 单例 httpclient 与创建新的 httpclient 请求

java - 对于创建/重构启用和/或查看实体之间关联的 wicket 组件有什么建议吗?

c# - 当新记录插入数据库时​​触发 Windows 服务

c# - 如何在这种情况下使用更少的代码

c# - 如何更改 WPF 中按钮的视觉行为?

c# - 线栅格化 : Cover all pixels, 与线渐变无关?

design-patterns - 如何抽象这段代码,这样我就不会破坏 DRY 原则