- Логика очень индивидуальна (не JSON/XML и т. Д.) Deserialization
Я рассматриваю подходы к хранению:
- : hky - Target объекта, значение - Serializer/Deserializer Type. Экземпляры создаются по требованию с помощью отражения (
Код: Выделить всё
Dictionary
: ключ - тип целевого объекта, значение - экземпляр сериализатора/deserializer.Код: Выделить всё
Activator.CreateInstance< /code>). < /p> pro: нижняя память.Dictionary
Pro: Высокая производительность (нет отражения на вывод). - Con: более высокое использование памяти (все случаи живут постоянно). Словарь . При первом доступе создайте экземпляр Serializer/Deserializer с помощью отражения и кэшируйте его (например, в словаре ). Используйте кэшированный экземпляр после этого.
Цель: сбалансировать память /производительность. < /P>
< /li>
< /ul>
Какой подход предпочтительнее для разработки, готовой к производству структуры? Есть ли лучшие альтернативы?)/deserializers (Код: Выделить всё
ISerializer
)?Код: Выделить всё
IDeserializer
опция A : интерфейсы)Код: Выделить всё
public interface ISerializer { string Serialize(T obj, ...); } public interface IDeserializer { T Deserialize(string obj, ...); } < /code> pros: < /p> Один класс может реализовать оба интерфейса (MyConverter : ISerializer, IDeserializer
- более гибкий
Не применяет ссылочный тип (может быть структурой ) -> Риск коробки при хранте в словаре < -тип> ) -> риск коробки. /> опция B < /strong>: абстрактные классы < /p>
public abstract class Serializer { public abstract string Serialize(T obj, ...); }
public abstract class Deserializer { public abstract T Deserialize(string obj, ...); }
< /code>
pros: < /p>
обеспечивает соблюдение класса (ссылочный тип) -> без бокса при хранении. < /li>
< /ul>
cons: < /p>
Не может быть inhreatiz классы. < /li>
< /ul>
Какой контракт (интерфейсы против абстрактных классов) лучше и почему? Как минимизировать воздействие на бокс. Если выбраны интерфейсы? Заранее спасибо за советы и лучшие практики!
Подробнее здесь: https://stackoverflow.com/questions/796 ... ork-storag