私のプロジェクトに取り組んでいて、たくさんのネストされたオブジェクトを使用しなければならなかったとき、インスタンス変数を設定するときにJavaの構造の設計が非常に不確かになりました上のオブジェクトから深くネストされたオブジェクトの私はおそらくJavaで構造化された設計の基本的な理解を欠場するように感じる。これについての洞察は高く評価されます。java design:サブオブジェクトの反復メソッド
私は変数としてネストされたサブオブジェクトを持つ論理構造を持っているとします。たとえば:
Country
Capital
Palace
King
私は今、主被写体(国)からキングプライベート文字列変数「nameOfKing」を設定したい場合は、私は王のすべての上位クラス内のすべてのメソッドを定義する必要があります。したがって、このような何か:
public class Country {
private Capital capital;
public void setNameOfKing(String n) {
capital.setNameOfKing(n);
}
}
public class Capital{
private Palace palace;
public void setNameOfKing(String n) {
palace.setNameOfKing(n);
}
}
public class Palace{
private King king;
public void setNameOfKing(String n) {
king.setNameOfKing(n);
}
}
public class King{
private String nameOfKing;
public void setNameOfKing(String n) {
this.nameOfKing = n;
}
}
を私はcountry.setNameOfKing(n);
を呼び出すことができますように。今はいくつかの変数があればこれで問題はありませんが、King、Palace、Capitalクラスには他の多くの変数とメソッドが定義されていて、それらのすべてが国から呼び出されなければならない場合はどうなりますか?宮殿にも(今すぐ作っている)ThroneRoom、Treasury、Queenなどのような他のクラスオブジェクトが含まれているとしたらどうでしょうか?サブクラスのほぼすべてのメソッドでCountryクラスに存在する必要があります。潜在的には、情報をサブオブジェクトに渡すために膨大な量のメソッドを作成しなければならず、その結果、非常に大きなCountryクラスが生成される可能性があります。
私は、王が宮殿と首都の余分な方法をやめて、カントリーそのものにも定義できるとは技術的には言えると思いますが、それでもカントリークラスにメソッドが存在しなければならない場合、この構造は、一緒にグループ化された論理のように理にかなっていますが、これに対して最善のアプローチは何でしょうか?私は良い方法があるかどうかはわかりませんが、私はここで何か不足していると感じることができません。
'getPalace()。setFoo()'はオプションではありませんか? –
このようにCountryクラスのmethidを変更することを意味しますか? 'capital.getPalace()。setNameOfKing(n); 'カントリークラスに多量のメソッドが潜在的に存在する可能性があるという事実を変更します – lokipoki