LINQ to SQLや (より高度な) Entity FrameworkなどのORM フレームワークを使用することを強くお勧めします。
これは宿題のように聞こえるので、抽象基本クラスを定義して冗長性を回避しながら、とにかく OOP に適した方法で解決しましょう。
public abstract class OneToMany<TMany>
{
private readonly IList<TMany> children = new List<TMany>();
public IList<TMany> Children { get { return children; }}
}
public class Circle : OneToMany<Division>
{
}
public class Division : OneToMany<Subdivision>
{
}
public class Subdivision : OneToMany<Feeder>
{
}
public class Feeder
{
}
使用法
var circle = new Circle();
circle.Children.Add(new Division());
var subdivision = new Subdivision();
subdivision.Children.Add(new Feeder());
subdivision.Children.Add(new Feeder());
circle.Children.First().Children.Add(subdivision);
説明
OneToMany<T>
1 対多の関係にあるすべてのクラスの派生元となる汎用抽象基本クラスです。1 対多の関係の多側のTMany
要素の型を示すon 型パラメーター を受け入れます。
つまり、Circle
は OneToMany<Division>
(1 つの円に複数の分割Division
がある)、 は OneToMany<Subdivision>
などです。
このクラス階層が定義されたので、「使用方法」セクションで示したように、データベース行を表すオブジェクト ツリーを構築できます。これを次のように視覚化できます。
サークル
| |
分割
| |
区画
/ \
フィーダー フィーダー