2011-10-05 8 views
0

私はいくつかの簡単なアプリケーションを計画しており、単一の責任とカプセル化の原則に従いたいと考えています。シンプルなオブジェクト - 単一の責任とカプセル化の原則による正しいデザインは何ですか?

主な選手は以下のとおりです。

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

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

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

ユーザクラス - ユーザを表します。だろう正しい方法のようなそれはそう新しい原則を

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

:saveUser方法は次のようになり、古い方法で

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

はこの正しいですか?

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

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

答えて

0

クラスにデータ(ユーザー)が含まれていて、永続化する方法がわかっている場合は、それ以上のことをしています。 別の言い方をしてください。それには、さらに多くの理由があります。データベース変更した場合、ユーザーが変更する必要があります(および他のすべてのビジネス・オブジェクトを永続化)

一つの解決法:あなたはスケッチとして

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

アプリケーションのデータベースの一部は、インターフェイスを実装します。 ユーザーがアプリケーション部分で完了した場合の作成。この投稿はインターフェイスも保持しています。 そのようにして、メインアプリケーションは永続層から分離されます。それについては何も知らない。代わりにあなたのデータベースは "プラグイン"されています。

(私はかなり愚かな名前のインタフェースを知っていますが、主なアイデアは懸念の分離であり、単一の責任を果たすことです)

関連する問題