私は2つの別々のエンティティのリストを持っています:
class EntityCollection : IList<Entity>
{
//...
}
EntityCollection Foo;
EntityCollection Bar;
Qux
リストFooにあるオブジェクトをBarに移動する操作を実装したいと思います。それを実装するための最良の方法は何ですか?
の
MoveTo
インスタンスメソッドとしてEntityCollection
:public void MoveTo(EntityCollection to, Entity entity); // Client code Foo.MoveTo(Bar, Qux);
の
MoveFrom
インスタンスメソッドとしてEntityCollection
:public void MoveFrom(EntityCollection from, Entity entity); // Client code Bar.MoveFrom(Foo, Qux);
上の静的
Move
メソッドとしてEntityCollection
:public static void Move(Entity entity, EntityCollection from, EntityCollection to); // Client code EntityCollection.Move(Qux, Foo, Bar);
Move
両方のコレクションを保持するクラスのインスタンスメソッドとして:public void Move(Entity entity, EntityCollection from, EntityCollection to); // Client code Holder.Move(Qux, Foo, Bar);
または、エンティティは一度に1つのコレクションにしか存在できないため、エンティティに自分の場所を追跡させ、エンティティ自体に実装することができます。
public void MoveTo(EntityCollection to)
{
if(Location != null)
Location.Remove(this);
to.Add(this);
Location = to;
}
// Client code
Entity e;
e.MoveTo(Foo);
// Later on...
e.MoveTo(Bar);
非常に多くのオプションが提示されたとき、私は知りたいです:moveメソッドはどこに属しますか?なぜ?