在过去的项目中,我注意到许多可维护性问题源于数据访问和业务逻辑的广泛混合,以及逻辑对实体的高度依赖性。我并没有试图设计一个避免所有这一切的假设系统,但我有兴趣通过强耦合代码减少长期引入的问题。
概述(简化为仅代表手头的问题):
更改
我打算让所有部件更易于测试和维护。因此,我决定引入一些更改,主要是在DAL和BLL中,因为它们造成的麻烦最多。逻辑嵌入在查询中,BLL高度依赖于DAL的方法和实体。
DAL
BLL
在我看来,到目前为止一切顺利,这应该对我们来说非常好。现在是最大的改变。
这似乎是一个好主意,但我期望有大量的业务逻辑,导致需要维护大量的命令对象。这是一种合理的恐惧,还是我担心太多?你对这些问题有什么经验?
答案 0 :(得分:1)
我真的没有看到命令模式在这里会有什么帮助。我成功地将BL与DAL分离的方法是使用外观模式。 DAL应该实现接口,并且应该通过将这些接口的实例注入其中来初始化BL。在测试BL时,您可以提供完整的模拟DAL,使单元测试变得更加容易。
答案 1 :(得分:1)
我可以从整体设计中看到几个问题。
删除了对DAL的引用(将它们完全解耦),所有逻辑 从UI通过一个新的“胶水”层调用,该层链接UI DAL和BLL。
您所指的此“胶水”图层应为Interfaces
图层。一般来说,Interfaces层以可测试的方式松散地耦合各种不相关的层。
我打算引入的另一个变化是命令的变体 模式,以消除对实体模型的依赖。我也 想确保业务逻辑是可测试的。 Ť
看一下Repository Pattern。使用依赖注入几乎就是它解决的问题。
引入了一种从C#而不是C#生成SQL的机制 硬编码查询。
小心这个。确保你没有使用家庭酿造LINQ to SQL重新发明轮子。
要把它包起来,改变是不可避免的。没有任何模式可以使所有变更更易于管理。命令模式不会解决业务层中的范围蔓延。您最好的选择是坚持使用您已经拥有的n层解决方案,并使用您提供的最佳信息尽最大努力做出明智的设计决策。