2011-06-17 2 views
5

ここに私の最初の質問があります。私は誰かが助けることを望む。
これは、オブジェクト指向の優れた設計方法と関係しています。
私はアンドロイドアプリを作成していますが、その質問は一般的なもので、スイングユーザーインターフェースにも同様に適用されます。
引数のために、私はクラスの学生がいると言う。オブジェクトは自分自身を描く必要がありますか?どうやって? (私はアンドロイドを使用していますが、質問はすべてのオブジェクト指向言語に適用されます)

public class Student { 
    public int StudentID; 
    public String firstName; 
    public String lastName; 
} 

あなたはめったにむしろ、あなたはそれが何をしたいのかということを教え、そしてオブジェクトは作業自体をやらせる必要があり、自身の情報のためのオブジェクトを頼むべきではないという原則があります。この目的を達成するために 、私は次の方法

public class Student { 
    public int StudentID; 
    public String firstName; 
    public String lastName; 

    // Constructors 
    public Student() {} 

    public Student (int StudentID){ 
     populateFromDataBase (StudentID); 
    } 

    private void populateFromDataBase (int StudentID){ 
     // Get the data from the database and set the 
     // values of all the properties of this 
    } 

    public void save(){ 
     // Save the values of the properties to db 
    } 

} 

他のクラスは、それが情報だ持続する方法を気にすることなく、このクラスを使用することができるようにこれはを持っています。
免責事項:私はアクセサーを使用していないことを知っています。私はこの例を単純なものにしています。
外部クラスがStudentIDをどのように知っているか尋ねないでください。質問したい質問とは関係ありません。これは次のとおりです。

(言ってください)生徒のテーブルとその詳細を画面に描画します。 UIクラス(アンドロイドのListActivityと言う)から、一連の生徒を取得し、それらをループして、自分のリストビューのプロパティを設定します。私が持っている問題は、オブジェクト指向設計の真の精神ではなく、あまりにも手続き的に考えているように思えることです。また、各学生オブジェクトにカプセル化に違反しているかどうかを尋ねる必要があります。
明らかに(私が読んだところから)生徒は自分自身を描くべきです。
ここで私は混乱します。 UIの何も知らない場合、学生はどのように自分自身を描くことができますか? UIへの参照を生徒オブジェクトに渡しますか?これはプレゼンテーション層とビジネス層の分離を破るかどうか?良い練習とは何か?私は何も見つけることができなかったので、記事コードやデザインパターンがありますか?私はそれほど重要ではないことを心配していますか?私は最初の厄介なアイデアを持って行かなければなりませんか?
私は実際に入力を感謝します。明らかに、これは私がコードしているものに再発する問題です。

私が考えた別の可能性は、UIから直接データベースにアクセスしてカーソルにバインドすることでしたが、それは間違っているようです。またはそれは?

+0

[モデルビューViewModel](http://en.wikipedia.org/wiki/Model_View_ViewModel)は読むのが良いことです。概念(私は信じる)基礎となるデータ(モデル)が変化したときにビューが自動的に更新されるようにする。したがって基本的に 'StudentView'と' StudentModel'に分割します – Raynos

答えて

3

意見は異なるかもしれませんが、IMHO、オブジェクトは自分自身を描くべきではなく、自分自身をデータベースに保存してはなりません。

図の場合、私は一般的に、Visitor Patternのような二重ディスパッチの形式を実装します。

UIから分離するには、Model-View-Controller,Model-View-PresenterまたはModel-View-ViewModelも考慮する必要があります。

マーティンファウラーのPatterns of Enterprise Application Architectureに記載され、ファウラーのウェブサイトcatalogに要約されているように、オブジェクトの永続性はかなり複雑になり、さまざまなパターンを含む可能性があります。

もちろん、UIはモデルをバイパスしてデータベースにまっすぐに進むべきではありません。

+0

ありがとうございました。あなたは私に多くのことを考えさせてくれました。書籍(ウェブサイト)を叩く時間。 – Dan

関連する問題