BLL应该是无国籍的吗?

时间:2010-11-19 15:29:47

标签: business-objects business-logic-layer bll

我正在为我的应用程序构建BLL。从我看到/读过的内容来看,BLL似乎应该是无国籍的。这是不是意味着所有BLL方法都可以是静态的?或者我至少只需要每个BLL类的一个实例?由于某种原因,这对我来说似乎很奇怪,所以我想我最好先检查一下,在我深入研究实验之前,我没有得到错误的结果。

我也在想这意味着BLL对象永远不应该包含数据,因为数据代表状态 - 因此对于每个调用的BLL操作,需要重新获取(或从缓存中获取)所有需要的数据然后丢弃。听起来不错吗?

感谢。

1 个答案:

答案 0 :(得分:2)

理论上,是的,无状态BLL可能意味着所有方法都可以是静态的。

但是,有一些注意事项可能会使您转向使用BLL对象的实例而不是静态。

  1. 静态方法会在类之间引入紧密耦合,并阻止您使用例如松散耦合依赖关系的接口。使用接口可以提高BLL的可测试性,因为现在可以在编写服务层的单元测试时进行模拟。如果您的BLL方法是静态的,那么如果没有“变通方法”(例如,在.Net环境中需要TypeMockMicrosoft Fakes),通常就无法做到这一点。

    < / LI>
  2. 在复杂的BLL方法(例如大型事务逻辑)上,您可能希望将每个业务规则重构为多个离散方法,并且在输出上,可能会将所有验证和规则违规累积到单个方法中包含所有违规的汇总结果。在这种情况下,分析要验证的实体/实体并累积规则违规可能很麻烦,而是选择在类实例上对它们进行有状态存储。实例BLL的基类或通用可以在这里提供帮助。