「子の可変引数を受け入れるように構築し、コードの繰り返しなしでいくつかの子の検査機能を公開するデータベースオブジェクトの抽象コンテナをモデル化する」と言われました。
これは、「子の数を数える」、「識別子で検索する」などのヒントになります。
簡単にするために、以下のコードには基本抽象 DatabaseObject 型 (つまり名前) から 1 つのフィールドしかありませんが、実際のコードには「識別子」や複雑なメタデータ検索ギミックなどがあります。
このアイデアは確かに便利ですが、コードを書き始めたものを見るだけで吐き気がします。この道を進むと、もつれのフランケンシュタインになるでしょう。これをまともなJavaにする方法はありますか? 参照する設計パターンはありますか? (コンポジットが思い浮かびます…)
前提: 共有される実際の機能は有用であり、潜在的なネスト可能な型 (スキーマにはテーブルがあり、テーブルには列があり、CompositeIndex(es) にはサブインデックスがあるなど)、特に識別子ルックアップに実際に適用できます...
...しかし、「もっと良い方法があるはずです」。「そんなコードを書くときは、自分の顔を平手打ちする」という声が私の中で感じられます。
ヘルプ :)
public abstract class DatabaseContainerObject<ChildType extends DatabaseObject>
extends DatabaseObject {
protected List<ChildType> children;
public DatabaseContainerObject(String name, ChildType... children) {
super(name);
this.children = new ArrayList<ChildType>(children.length);
this.children.addAll(Arrays.asList(children));
}
protected List<ChildType> getChildren() {
return Collections.unmodifiableList(children);
}
... count ...
... find ...
... sort ...
... remove ...
...
}