业务层设计——如何定义规则

Posted

技术标签:

【中文标题】业务层设计——如何定义规则【英文标题】:Business layer design - How to define rules 【发布时间】:2011-12-17 17:33:40 【问题描述】:

我了解,将您的业务规则放在业务层中并将您的数据访问放在单独的数据访问层中是最佳做法,而实体是您的模型的一部分。

例如,我正在使用模型中定义的客户实体,我可以通过数据访问层从数据库中获取所有客户。我还可以通过 DAL 添加新客户。

但是,在添加客户之前,我需要对其进行验证 - 所以我想我需要在业务层中定义规则 - 但我不太确定如何去做。

我的业务层是否只有接受实体的方法 参数?像 BLL.Customers.Validate(Model.Customer 顾客) ?

或者

我的业务层是否扩展了我的实体?我应该使实体 像客户部分类这样的类?以便 BLL 可以扩展它们 进一步了解业务规则?

我不知道如何设计业务层。

【问题讨论】:

在 *** 上对域驱动设计中的验证进行了很好的讨论。访问以下链接了解更多详情***.com/questions/516615/…。 您可能也对这个问题感兴趣:***.com/questions/5818898/… 【参考方案1】:

您的实体应该真正拥有自己的所有业务行为,因此实体本身会有一个 Validate 方法。我还喜欢在我的实体中使用静态工厂方法来创建实体:

public class Cusotmer

    private long? _id;
    private string _name;
    //other attributes...

    public static Customer Create(string name)
    
        Customer customer = new Customer();
    

    public void Validate()
    
        if(_name == null)
            throw new ValidationException("Name has not been set.");
    

我不确定您为什么需要部分类,除非您可能是从数据库中生成实体的代码?

【讨论】:

如果我将 validate 方法与实体绑定,并且根据使用情况我有不同的验证要求,那么实体会变得臃肿。我有点喜欢访客模式的使用。 用几个 if 语句来解释一种验证方法的不同。或者,您可能需要在不同的系统中针对不同的用途使用不同的实体:阅读有界上下文。

以上是关于业务层设计——如何定义规则的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 业务逻辑层

PetShop之业务逻辑层设计 - 《解剖PetShop》系列之五

三层架构之业务层逻辑层

解构领域驱动设计:领域驱动设计的核心之分层架构

三层架构之业务逻辑层

如何设计业务逻辑层