public class Boss
{
private string name;
private List<Hashtable> dogs;
private int limit;
public Boss(string name, int dogLimit)
{
this.name = name;
this.dogs = new List<Hashtable>();
this.limit = dogLimit;
}
public string Name { get { return this.name; } }
public void AddDog(string nickname, Dog dog)
{
if (!this.dogs.Contains(nickname) && !this.dogs.Count == limit)
{
this.dogs.Add(nickname, dog);
dog.AddBoss(this);
}
}
public void RemoveDog(string nickname)
{
this.dogs.Remove(nickname);
dog.RemoveBoss(this);
}
public void Hashtable Dogs { get { return this.dogs; } }
}
public class Dog
{
private string name;
private List<Boss> bosses;
public Dog(string name)
{
this.name = name;
this.bosses = new List<Boss>();
}
public string Name { get { return this.name; } }
public void AddBoss(Boss boss)
{
if (!this.bosses.Contains(boss))
{
this.bosses.Add(boss);
}
}
public void RemoveBoss(Boss boss)
{
this.bosses.Remove(boss);
}
public ReadOnlyCollection<Boss> Bosses { get { return new ReadOnlyCollection<Boss>(this.bosses); } }
}
上記は、ボスが複数の犬(制限が適用されている)を持つことができ、犬が複数のボスを持つことができるという関係を維持しています。また、上司が犬を追加するときに、その上司にのみ固有の犬のニックネームを指定できることも意味します。つまり、他のボスは同じ犬を追加できますが、ニックネームは異なります。
制限については、ボスオブジェクトをインスタンス化する前に読み込んだApp.Config値としてこれを使用する可能性があります。したがって、小さな例は次のようになります。
var james = new Boss("James", ConfigurationManager.AppSettings["DogsPerBoss"]);
var joe = new Boss("Joe", ConfigurationManager.AppSettings["DogsPerBoss"]);
var benji = new Dog("Benji");
var pooch = new Dog("Pooch");
james.AddDog("Good boy", benji);
joe.AddDog("Doggy", benji);
james.AddDog("Rover", pooch);
joe.AddDog("Buddy", pooch); // won't add as the preset limit has been reached.
必要に応じてこれを微調整することはできますが、探しているものの基本はそこにあると思います。
- 上司は制限付きで複数の犬を飼うことができます
- 犬は複数のボスを持つことができます
- ボスは同じ犬に対して異なるニックネームを持つことができます。