0

我正在计划一些简单的应用程序,并希望遵循单一职责和封装原则。

主要参与者有:

API 类- 它公开了保存用户的能力:

class API{
    ....
    public void saveUser(id, name, address){
        //save the received user in the DB
    }
    ....
}

DBConnector 类- 它公开了将用户数据保存到数据库中的能力。

User 类- 代表一个用户。

在旧的方式 saveUser 方法看起来像:

IDBConnector connector = DBConnectorFactory.getDBConnector();
User user = new User(id, name, address);
connector.saveUser(user);

根据新原则,正确的方法似乎是:

User user = new User(id, name, address, DBConnectorFactory.getDBConnector());
user.save();

它是否正确?

用户应该处理数据库保存吗?

如果没有,你能提供更好的方法吗?

4

1 回答 1

0

如果你的类既包含数据(用户)又知道如何持久化,那么它做的不止一件事。换一种方式。它有不止一个改变的理由。如果数据库更改,用户将不得不更改(以及所有其他持久化的业务对象)

一种解决方案:

public interface Persister {
    void persist(User user);
}

然后,您的应用程序的数据库部分将按照您的草图实现接口。如果用户在应用程序部分完成创建。这篇文章也包含接口。这样,您的主应用程序就与持久层分离。它对此一无所知。相反,您的数据库已“插入”。

(我知道我们命名的接口非常愚蠢。但主要思想是关注点分离,以履行单一职责)

于 2011-11-14T21:46:54.610 回答