Проектирование системы сериализатора/Deserializer в пользовательской структуре C#: выбор хранения и контрактов [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проектирование системы сериализатора/Deserializer в пользовательской структуре C#: выбор хранения и контрактов [закрыто]

Сообщение Anonymous »

Я разрабатываю структуру обучения/обучения C#. Я планирую добавить поддержку сериализации объектов/десериализации с этими спецификами:
  • Логика очень индивидуальна (не JSON/XML и т. Д.) Deserialization
Вопрос 1 : хранение сериализаторов/deserializers
Я рассматриваю подходы к хранению:
  • Код: Выделить всё

    Dictionary
    : hky - Target объекта, значение - Serializer/Deserializer Type. Экземпляры создаются по требованию с помощью отражения (

    Код: Выделить всё

    Activator.CreateInstance< /code>). < /p>
    
     pro: нижняя память.Dictionary
    : ключ - тип целевого объекта, значение - экземпляр сериализатора/deserializer.

    Pro: Высокая производительность (нет отражения на вывод).
  • Con: более высокое использование памяти (все случаи живут постоянно). Словарь . При первом доступе создайте экземпляр Serializer/Deserializer с помощью отражения и кэшируйте его (например, в словаре ). Используйте кэшированный экземпляр после этого.

    Цель: сбалансировать память /производительность. < /P>
    < /li>
    < /ul>
    Какой подход предпочтительнее для разработки, готовой к производству структуры? Есть ли лучшие альтернативы?

    Код: Выделить всё

    ISerializer
    )/deserializers (

    Код: Выделить всё

    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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»