2009-06-17 23 views
0

私はオブジェクト指向設計について簡単な質問がありますが、何が最善の解決策であるかを理解することがいくつか困難です。いくつかのメソッドとかなりの量のプロパティ(おそらくEmployeeオブジェクト)を持つオブジェクトがあるとします。 FirstName、Addressなどのプロパティ。データ構造を示します。次に、IsDueForPromotion()のようなEmployeeオブジェクトのメソッドが存在する可能性があります。データ構造内オブジェクト

これを混ぜることは私にはうってつけではありませんが、私は2つのものを分けていきたいと思いますが、どうすればよいか分かりません。私は、すべてのプロパティデータを構造体に入れ、従業員オブジェクトの内部にprivate構造体EmployeeDataを持っていると考えています。

これは本当に良いアイデアですが、同じクラスのすべての方法と牧草地とそれに伴います。メソッドからデータを分離すると複雑になりますか?

誰かがこれに関するアイディアを持っていると大変感謝しています。

J

答えて

3

は一緒に、データと対応するメソッドをカプセル化するOO-designの考えではなかったですか?

ここでの質問は、Employeeオブジェクトがプロモーションのために開始予定日を知る方法です。私は、そのメソッドが他のクラスに所属していることを推測します。本当にばかげた例Manager m = new Manager(); manager.IsDueForPromotion(employeeobject);

しかし、Employeeのフィールドにアクセスする他のメソッドは、このクラスに属しています。

私がIsDueForPromotionについて提起した質問は、あなたのアプリケーションによって異なり、従業員がPOJOまたはDTOであるか、より多くの「インテリジェントな」方法を関連付けることができるかどうかによって異なります。

0

オブジェクト操作(メソッド)は、そのプロパティを使用することになっています。だから私は一緒に去る方が良いと感じている。

プロパティを必要としない場合は、ユーティリティメソッドの一種であり、それ以外の他のヘルパークラスで定義する必要があります。

0

まあ、OOは、同じ場所に一緒に属しているデータと機能をグループ化する方法です。私は本当にあなたがなぜデータがたくさんある時に例外を作るのか分からない。私が考えることができる唯一の理由は読みやすさです。

個人的には、データを保持する別の構造体を用意することで、不必要に複雑なものになると思います。私はまた、これが良い習慣になるかどうかについて矛盾している。一方では、クラスがそのクラスの機能をどのように実装しているのか、それともデータを格納するのは外界から隠されているはずです。一方、データがクラスに属していれば、構造体のようなものに格納するのは不自然です。

あなたが持っているデータを見て、小さなドメインオブジェクトにモデル化できるかどうかを調べることは面白いかもしれません。たとえば、street、housenumber、state、zip、countryなどの値を保持するAddressオブジェクトがあります。そうすれば、EmployeeオブジェクトはAddressオブジェクトだけを保持します。 Addressオブジェクトは、Companyオブジェクトなどで再利用できます。

1

あなたのデータはあなたがVisitorパターンに試してみるとよいでしょう行動より遅い進化している場合:

class Employee { 

    String name; 
    String surName; 
    int age; 
    // blah blah 
    // ...getters 
    // ...setters 
    // other boilerplate 

    void accept(EmployeeVisitor visitor) { 
     visitor.visitName(name); 
     visitor.visitAge(age); 
     // ... 
    } 
} 

interface EmployeeVisitor { 

    void visitName(String name); 

    void visitAge(int age); 
} 

この設計のあなたは Employeeクラスを変更することなく、新しい操作を追加することができます。 仕様パターンもご確認ください。

0

オブジェクト指向プログラミングの基本原則は、FirstNameやAddressなどのデータをIsDueForPromotion()などの機能とともにグループ化することです。オブジェクトが保持しているデータの量は関係ありませんが、そのデータは保持されます。オブジェクトからデータを削除する唯一の方法は、企業オブジェクトに格納する必要があるときにEmployeeオブジェクトに会社名を格納するなど、そのオブジェクトとは関係がない場合です。