0

私は単純なアプリケーションを計画しており、単一の責任とカプセル化の原則に従いたいと考えています。

主なプレーヤーは次のとおりです。

API クラス- ユーザーを保存する機能を公開します。

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

DBConnector クラス- ユーザー データを DB に保存する機能を公開します。

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();

これは正しいです?

ユーザーが DB の保存を処理する必要がありますか?

そうでない場合は、より良い方法を提供できますか?

4

1 に答える 1

0

クラスの両方にデータ (ユーザー) が含まれており、永続化する方法を知っている場合、それは複数のことを行っています。別の言い方をすれば。変更する理由は 1 つ以上あります。データベースが変更された場合、ユーザー (および他のすべての永続化されたビジネス オブジェクト) を変更する必要があります。

1 つの解決策:

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

アプリケーションのデータベース部分は、スケッチしたとおりにインターフェイスを実装します。ユーザーがアプリケーション部分で行う場合の作成。この投稿にはインターフェースも含まれています。こうすることで、メイン アプリケーションが永続層から分離されます。それはそれについて何も知りません。代わりに、データベースは「プラグイン」されています。

(私たちがかなりばかげた名前を付けたインターフェースであることは承知しています。ただし、主なアイデアは、単一の責任を果たすための関心の分離です)

于 2011-11-14T21:46:54.610 に答える