Recientemente he estado pensando en proteger parte de mi código. Tengo curiosidad por saber cómo uno podría asegurarse de que un objeto nunca se pueda crear directamente, sino solo a través de algún método de una clase de fábrica. Digamos que tengo una clase de "objeto comercial" y quiero asegurarme de que cualquier instancia de esta clase tenga un estado interno válido. Para lograr esto, necesitaré realizar algunas comprobaciones antes de crear un objeto, probablemente en su constructor. Todo esto está bien hasta que decida que quiero que esta verificación sea parte de la lógica empresarial. Entonces, ¿cómo puedo hacer que un objeto comercial se pueda crear solo a través de algún método en mi clase de lógica comercial, pero nunca directamente? El primer deseo natural de usar una palabra clave de "amigo" de C ++ se quedará corto con C #. Entonces necesitamos otras opciones ...
Probemos con un ejemplo:
public MyBusinessObjectClass
{
public string MyProperty { get; private set; }
public MyBusinessObjectClass (string myProperty)
{
MyProperty = myProperty;
}
}
public MyBusinessLogicClass
{
public MyBusinessObjectClass CreateBusinessObject (string myProperty)
{
// Perform some check on myProperty
if (true /* check is okay */)
return new MyBusinessObjectClass (myProperty);
return null;
}
}
Todo está bien hasta que recuerde que aún puede crear la instancia MyBusinessObjectClass directamente, sin verificar la entrada. Me gustaría excluir por completo esa posibilidad técnica.
Entonces, ¿qué piensa la comunidad sobre esto?