【发布时间】:2009-07-23 20:01:00
【问题描述】:
我有两个单独的实体列表:
class EntityCollection : IList<Entity>
{
//...
}
EntityCollection Foo;
EntityCollection Bar;
我想实现一个操作,将列表 Foo 中的对象 Qux 移动到 Bar。最好的实现方式是什么?
-
作为
EntityCollection上的MoveTo实例方法:public void MoveTo(EntityCollection to, Entity entity); // Client code Foo.MoveTo(Bar, Qux); -
作为
EntityCollection上的MoveFrom实例方法:public void MoveFrom(EntityCollection from, Entity entity); // Client code Bar.MoveFrom(Foo, Qux); -
作为
EntityCollection上的静态Move方法: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);
或者,由于实体一次只能在一个集合中,我可以让实体自己跟踪它们的位置,并在实体本身上实现它:
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 方法属于哪里?为什么?
【问题讨论】:
标签: list methods separation-of-concerns