Disons que j'ai des objets de domaine qui devront être sérialisés/empaquetés en utilisant un format binaire personnalisé afin qu'ils puissent être envoyés via des sockets à des processus externes. Mon premier instinct serait de créer une interface qui représente n'importe quel objet qui peut être emballé dans ce format binaire.Classe: Sérialiser dans un objet de domaine ou une classe auxiliaire
public interface IPackable
{
byte[] Pack();
}
Ensuite, mes objets de domaine (tels que Entity
, State
, Vector
, etc.) seraient chacun implémenter cette interface. Ceci est similaire à la façon dont la sérialisation par défaut fonctionne dans .NET et Java.
public class Vector : IPackable
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
// other operators and methods...
public byte[] Pack
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(X);
writer.Write(Y);
writer.Write(Z);
return stream.ToArray();
}
Cependant, plus j'apprends sur les principes de conception (comme le SOLID's Single Responsibility Principle), plus je pense que je devrais créer une catégorie distincte pour emballer mes objets de domaine.
Je peux voir les avantages et les inconvénients des deux. Qu'est-ce que vous en pensez tous? Si la réponse est créer une classe distincte pour l'emballage des objets de domaine, dois-je créer un packer distinct pour chaque objet de domaine (tel que EntityPacker
, StatePacker
, VectorPacker
, etc.)?
Merci
Je ne pense pas qu'il y ait une réponse concluante à cette question, faire une recherche sur "Smart Objects, Dumb Archives" vs "Objets Dumb, Smart Archives" - c'est le même dilemme. –