DAO 和 SOLID 设计原则

DAOs and SOLID design principles

我一直在阅读 SOLID 设计原则,目前正在研究 'Single Responsibilty Principle',但我对这个原则的用例很好奇。在我工作的公司,我们有 DAO,它有 readinsertupdate 的方法来管理数据库中的记录。

这样的事情会破坏 'Single Responsibilty Principle' 吗?如果是这样,那么每次插入、读取和更新是否需要 类?

DAO 示例:

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

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

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

单一职责原则指出

A class must have only one reason to change.

假设我们有 UserDAO 方法读取、保存、删除、更新。因此,此 class 仅在与用户相关的更改时才会更改。因此,它只有一个更改原因,即 User.

因此,我认为如果实施正确,它不会违反 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,因为只有在用户逻辑发生变化时才会改变保存方法。地址逻辑由地址 class 本身处理。

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

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

在上面的代码中,Address 或 Payment 逻辑的任何变化都会使这个 DAO 保存方法也发生变化。它违反了 SRP。

所以,这真的取决于实施。