Сериализующая ссылка на объекты с сохранением состояния без состояния

#c# #.net #xml #serialization #factory

#c# #.net #xml #сериализация #фабрика

Вопрос:

Это своего рода проблема проектирования:

 class Suite
{
  List<Plugins> Plugins {get;set;} 
}

class DataCollector : Plugin
{
  string Property1 {get;set;}
  string Property2 {get;set;}

  public void PrintMyName();    
}

class Measurement: Plugin
{
  string Property1 {get;set;}
  string Property2 {get;set;}

  public void PrintMyName();    
}
  

Теперь я хочу, чтобы набор классов был сериализуемым. Проблема здесь заключается в следующем:

  1. Сериализация XML в основном используется для сериализации объектов типа DTO, поэтому вы в основном сериализуете / десериализуете свои свойства с сохранением состояния, и это нормально

  2. Этот конкретный класс, который будет сериализован, содержит плагин типа (который содержит комбинацию свойств, которая содержит некоторые значения свойств) функционалисты.

  3. Это означает, что мне нужно использовать factory, чтобы заставить реальный экземпляр объекта для плагина ожить со всей его функциональностью со значениями свойств.

Я смотрю на комбинацию XMLSrializable Factory? Есть ли какой-нибудь хороший элегантный способ добиться этого?

Комментарии:

1. Что такое «функционалист»? Кроме того, вероятно, лучше не вводить свой код в MS Word, где ключевые слова, которые не должны быть заглавными, к сожалению, заглавными. ( class , public , void , и т.д.)

Ответ №1:

Почему бы не реализовать IDeserializationCallback интерфейс, чтобы после десериализации вы могли вернуть свой объект к жизни с помощью вызова вашей фабрики.

Я не совсем понимаю цель ваших классов, но я приведу пример, насколько смогу:

 public class MyDataClass : IDeserializationCallback
{

   public int SimpleKeyProperty { get; set; }
   public string TextProperty{ get; set; }

   public void OnDeserialization(object sender)
   {
      //upon deserialization use the int key to get the latest value from
      //factory (this is make believe...)
      TextProperty = SomeFactory.GetCurrentValue( this.SimpleKeyProperty) ;
   }
}
  

Комментарии:

1. я думал о разделении класса на две части DTO service. это означает, что DTO будет сброшен в XML, и служба будет запущена factory. Но нужен способ связать их друг с другом

2. Я думаю, что реализация этого интерфейса позволит вам это сделать.

3. Можете ли вы набросать схему этого интерфейса?