【问题标题】:Should a BLL be stateless?BLL 应该是无国籍的吗?
【发布时间】:2011-05-12 16:56:50
【问题描述】:
我正在为我的应用程序构建一个 BLL。从我所见/所读,似乎 BLL 应该是无状态的。这是否意味着所有 BLL 方法都可以是静态的?或者我至少只需要每个 BLL 类的一个实例?出于某种原因,这对我来说似乎很奇怪,所以我想我最好在深入研究实验之前检查一下我没有搞错。
我还认为这意味着 BLL 对象不应该包含数据,因为数据代表状态 - 因此对于调用的每个 BLL 操作,需要重新查询(或从缓存中获取)所需的任何数据,然后丢弃。听起来对吗?
谢谢。
【问题讨论】:
标签:
business-objects
business-logic-layer
bll
【解决方案1】:
理论上,是的,无状态 BLL 可能意味着所有方法都可以是静态的。
但是,有一些考虑因素可能会让您倾向于使用 BLL 对象的实例而不是静态的。
静态方法会在类之间引入紧密耦合并阻止您使用例如松散耦合依赖关系的接口。接口的使用提高了 BLL 的可测试性,因为现在可以在为服务层编写单元测试时对其进行模拟。如果您的 BLL 方法是静态的,那么您通常无法在没有“变通方法”的情况下执行此操作(例如,在 .Net 环境中您需要 TypeMock 或 Microsoft Fakes)。
在复杂的 BLL 方法(例如大型事务逻辑)上,您可能希望将每个业务规则重构为几个离散的方法,并且在输出上,可能会将所有验证和规则违规累积到一个单独的方法中包含所有违规行为的汇总结果。在这种情况下,将要验证的一个或多个实体分流并累积规则违规可能会很麻烦,而是选择在类实例上进行有状态存储。您的实例 BLL 的基类或泛型可以在这里提供帮助。