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