Pregunta

Saludos,

Tengo un objeto particular que se puede construir a partir de un archivo, como tal:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

Quiero, en esencia, decir " ok, y ahora este objeto que acabamos de deserializar, este es el objeto que de hecho somos. " Hay algunas formas de hacerlo, y me pregunto cuál es la mejor práctica. Mis ideas son:

  • Cree una función de copia en mí que copie el campo objeto por campo. Esta es la implementación actual y estoy bastante seguro de que es una idea horrible, ya que siempre que se agregue un nuevo miembro al objeto, también debo recordar agregarlo a la función 'copiar en mí', y no hay forma de mantenerlo. .
  • Cree un método estático para la clase ConfigObj que actúe como un constructor de facto para cargar el objeto. Esto suena mucho mejor, pero no es la mejor práctica.

Sin embargo, no estoy del todo contento con ninguno de los dos. ¿Cuál es la mejor práctica reconocida aquí?

¿Fue útil?

Solución

Su segunda opción es lo que se denomina método de fábrica y es una técnica de diseño común. Si utiliza esta técnica, es posible que necesite saber el tipo de clase que cargará antes de cargar la clase. Si se encuentra en esta situación, puede usar un tipo de fábrica de nivel superior que analice el flujo y llame al método de fábrica para el tipo de clase apropiado.

Otros consejos

No hay nada de malo en tener un método estático en lugar de un constructor. De hecho, tiene un número de ventajas .

Siempre voy con el método estático. Por lo general, es una especie de jerarquía que se carga y, por lo tanto, solo el objeto raíz necesita el método. Y no es realmente un enfoque inusual en el marco .NET (por ejemplo, Graphics.FromImage), por lo que debería estar bien con los usuarios de su clase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top