DAO和SOLID设计原则

问题描述

我一直在阅读有关SOLID设计原则的信息,目前正在研究“单一职责原则”,但是我对该原则的用例感到好奇。在我工作的公司中,我们有DAO,它们具有readinsertupdate方法来管理数据库中的记录。

这样的事情会打破“单一责任原则”吗?如果是这样,那么您是否需要为每个插入,读取和更新类?

示例DAO:

class UserDAO {
    public function read(where: object) {
        // read code
    }

    public function insert(user: User) {
        // insert code
    }

    public function update(user: User) {
        // update code
    }
}

解决方法

单一责任原则指出

一个班级只有一个改变的理由。

假设我们有 UserDAO ,其中包含读取,保存,删除和更新方法。因此,只有在与用户相关的更改时,此类才会更改。因此,它有一个更改的唯一原因,即用户。

因此,我认为,如果实施正确,它不会违反SRP(单一责任原则)。

void save(User user){
//user related logic
}

void save(User user){
// user related logic and address logic encapsulated inside address class
//eg: address.getAddress(user.getId);
}

在上述情况下,它不会违反SRP,因为仅在用户逻辑发生更改时才会更改save方法。地址逻辑本身由Address类处理。

例如:如果保存方法如下:

void save(User user){
Address address = new Address();
 //Address logic
 Payment payment = new Payment();
 //Payment logic
}

在上面的代码中,地址或付款逻辑中的任何更改都会使此DAO保存方法也发生更改。它违反了SRP。

所以,这实际上取决于实现。