J'ai deux listes distinctes d'entités:moyen privilégié de « déplacer » un objet entre les listes
class EntityCollection : IList<Entity>
{
//...
}
EntityCollection Foo;
EntityCollection Bar;
Je veux mettre en œuvre une opération pour déplacer un objet Qux
qui est sur la liste Foo Bar. Quelle est la meilleure façon de l'implémenter?
En tant que méthode d'instance
MoveTo
surEntityCollection
:public void MoveTo(EntityCollection to, Entity entity); // Client code Foo.MoveTo(Bar, Qux);
En tant que méthode d'instance
MoveFrom
surEntityCollection
:public void MoveFrom(EntityCollection from, Entity entity); // Client code Bar.MoveFrom(Foo, Qux);
En tant que procédé
Move
statique surEntityCollection
:public static void Move(Entity entity, EntityCollection from, EntityCollection to); // Client code EntityCollection.Move(Qux, Foo, Bar);
En tant que méthode d'instance
Move
la classe qui détient des collections de Both:public void Move(Entity entity, EntityCollection from, EntityCollection to); // Client code Holder.Move(Qux, Foo, Bar);
Alternativement, et étant donné que les entités ne peuvent être une collection à la fois, je pouvais avoir la les entités suivent elles-mêmes leur emplacement et l'implémentent sur l'entité elle-même:
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);
d avec autant d'options, je veux savoir: d'où vient la méthode de déplacement? Et pourquoi?
La raison pour laquelle j'ai demandé n'était pas linguistique, était exactement sur la responsabilité. Merci pour votre avis. Btw, le Titulaire existe déjà, je ne ferais qu'ajouter des fonctionnalités à celui-ci. –
J'ai détaillé d'autres parties du système et j'en suis arrivé à la conclusion que le Titulaire devrait être en mesure de faire le déplacement, car il effectuera également une validation, car certaines entités ne peuvent pas être déplacées vers Bar. –