Проектирование системы сериализатора/deserializer в пользовательской структуре C#: выбор хранения и контрактов
Я разрабатываю структуру обучения/обучения C#. Я планирую добавить поддержку сериализации/десериализации объектов с помощью этих спецификов:
Логика очень индивидуальна (не json/xml и т. Д.).
Пользователи фреймворта должны быть способны добавлять свои собственные сериализаторы/Deserializers только для типа. или только десериализация.
Вопрос 1: Хранение сериалов/deserializers
Я рассматриваю подходы к хранению:
Dictionary: ключ - тип целевого объекта, значение - Serializer/Deserializer type . Экземпляры создаются по требованию с помощью отражения (Activator.CreateInstance< /code>).
pro: < /strong> с более низким следствием памяти.
con: < /strong> отражение на накладные расходы на все использование = Hit. < /li>
Dictionary: ключ - тип целевого объекта, значение - экземпляр из сериализатора/deserializer.
pro: Высокая производительность (не отражение на вызов).
con: более высокое использование памяти (все случаи живут постоянно). Словарь . При первом доступе создайте экземпляр Serializer/Deserializer через отражение и Cache IT (например, в словаре ). Используйте кэшированный экземпляр после этого.
Цель: Mamer/Performance.
Какой подход предпочтительнее для разработки рамки, готовых к производству? . /> Как пользователи должны реализовать свои сериализаторы (ISerializer)/deserializers (IDeserializer)?
опция a: интерфейсы
public interface ISerializer { string Serialize(T obj, ...); }
public interface IDeserializer { T Deserialize(string obj, ...); }
< /code> pros: < /strong> < /p>
Один класс может реализовать оба интерфейса (MyConverter : ISerializer, IDeserializer).
более гибкий.
минусы:
не принуждает к соблюдению типа ссылки (может быть структурой ) -> риск коробочки, когда в Dictionary < /ul>
< /li> Вариант B: Аннотация классов < /strong> < /p>
public abstract class Serializer { public abstract string Serialize(T obj, ...); }
public abstract class Deserializer { public abstract T Deserialize(string obj, ...); }
pros:
Обеспечивает соблюдение класса (тип ссылки) -> Без бокса при хранении.
[b] Проектирование системы сериализатора/deserializer в пользовательской структуре C#: выбор хранения и контрактов [/b] Я разрабатываю структуру обучения/обучения C#. Я планирую добавить поддержку сериализации/десериализации объектов с помощью этих спецификов: [list] [*] Логика очень индивидуальна (не json/xml и т. Д.). [*] Пользователи фреймворта должны быть способны добавлять свои собственные сериализаторы/Deserializers только для типа. [b] или [/b] только десериализация. [/list] [b] Вопрос 1: Хранение сериалов/deserializers [/b] Я рассматриваю подходы к хранению: [list] [*]Dictionary: ключ - тип целевого объекта, значение - Serializer/Deserializer [b] type [/b]. Экземпляры создаются по требованию с помощью отражения (Activator.CreateInstance< /code>).
[b] pro: < /strong> с более низким следствием памяти.
con: < /strong> отражение на накладные расходы на все использование = Hit. < /li> Dictionary: ключ - тип целевого объекта, значение - экземпляр [/b] из сериализатора/deserializer.
[b] pro: [/b] Высокая производительность (не отражение на вызов).
[b] con: [/b] более высокое использование памяти (все случаи живут постоянно). Словарь . При первом доступе создайте экземпляр Serializer/Deserializer через отражение и [b] Cache [/b] IT (например, в словаре ). Используйте кэшированный экземпляр после этого.
[b] Цель: [/b] Mamer/Performance. [/list] [b] Какой подход предпочтительнее для разработки рамки, готовых к производству? [/b]. /> Как пользователи должны реализовать свои сериализаторы (ISerializer)/deserializers (IDeserializer)? [list] [*] [b] опция a: интерфейсы [/b] public interface ISerializer { string Serialize(T obj, ...); } public interface IDeserializer { T Deserialize(string obj, ...); } < /code> [b] pros: < /strong> < /p>
Один класс может реализовать оба интерфейса (MyConverter : ISerializer, IDeserializer). [*] более гибкий. [/list] минусы: [/b] [list] [*] не принуждает к соблюдению типа ссылки (может быть структурой ) -> риск коробочки, когда в Dictionary < /ul> < /li> [b] Вариант B: Аннотация классов < /strong> < /p> public abstract class Serializer { public abstract string Serialize(T obj, ...); } public abstract class Deserializer { public abstract T Deserialize(string obj, ...); }
pros: [/b]
Обеспечивает соблюдение класса (тип ссылки) -> Без бокса при хранении. [/list] [b] [/b]
Мне нужно разработать систему, в которой пользователи будут двух разных типов -
Admins,Customer.Admins может иметь роли SUPER_ADMIN,ADMIN,MEMBER.Customer может иметь роли OWNER,TEAM_LEAD,TEAM_MEMBER
Не могу решить, какой подход будет правильным....
Как разработать эффективную адаптивную систему обнаружения вторжений, которая использует методы машинного обучения для автоматического изменения существующих правил Suricata на основе динамического анализа сетевого трафика, сводя при этом к минимуму...
Как разработать эффективную адаптивную систему обнаружения вторжений, которая использует методы машинного обучения для автоматического изменения существующих правил Suricata на основе динамического анализа сетевого трафика, сводя при этом к минимуму...
Я работаю над веб -приложением с системой уведомлений, и я пытаюсь разработать гибкую схему базы данных для хранения различных типов уведомлений. Система должна обрабатывать различные типы уведомлений, такие как: