2011-05-19 8 views
6

Estoy implementando el Builder Pattern para generar un conjunto de objetos. Estos objetos luego tienen que ser serializados a XML y deserializados de XML.Integración de la serialización y la deserialización en el patrón de diseño del generador usando C#

Sé cómo realizar la serialización y deserialización, sin embargo, no estoy seguro de cómo integrarlo en el patrón de diseño.

Supongamos, por ejemplo, que mi código usa el constructor para crear productos foo y barra. Mi primer pensamiento es poner una función de serialización en cada uno porque cada producto sabe qué serializar.

Mi siguiente pensamiento fue poner la deserialización en el Director o en el ConcreteBuilder.

Lo que no me gusta de esto es que las funciones de serialización y deserialización estarán en diferentes lugares: una en el archivo para la declaración de los objetos foo y bar y otra en los archivos de otra cosa. Me preocupa que puedan terminar desincronizándose entre sí mientras trabajo en las clases de productos.

Mi último pensamiento fue para el Director o ConcreteBuilder para realizar la serialización y deserialización. Lo que no me gusta de eso es que los productos tienen que saber qué constructor se usó o saber quién es el Director.

Para aclarar - hay dos situaciones en las que un producto puede ser creado:

  1. El usuario hace clic en un botón en la interfaz de usuario
  2. usuario carga un proyecto XML

Respuesta

0

Mi solución actual es que el producto realice la serialización y la ConcreteBuilder realizar la deserialización, a continuación, poner el producto y es ConcreteBuilder declaraciones en el mismo archivo de origen.

Aunque la tarea se distribuye en dos clases, al menos se mantiene unida en un archivo.

Se agradecen todas las soluciones mejores.

1

no puedes ¿simplemente tiene una clase de serialización/deserialización estática y crea un método genérico que puede tomar cualquier tipo de objeto? ¿No es el patrón simplemente para construir los objetos? ¿Entonces puedes serializar como lo desees?

Algo así como:

public static string Serialize<T>(T data) 
    { 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
     StringWriter sw = new StringWriter(); 
     xmlSerializer.Serialize(sw, data); 
     return sw.ToString(); 

    } 
+0

Buena idea, sin embargo, realizo la serialización XML y la deserialización manualmente porque me encontré con demasiadas limitaciones con el método automático. También necesito activar eventos después de la deserialización y establecer indicadores relacionados con el estado del proyecto del usuario. – Andy

Cuestiones relacionadas