Récemment, j'ai eu la réflexion sur la sécurisation de certains de mon code. Je suis curieux de voir comment on pourrait faire en sorte qu'un objet ne peut jamais être créés directement, mais uniquement par le biais d'une méthode d'une classe factory. Disons que j'ai quelques "business object" de la classe et je veux m'assurer que toute instance de cette classe sera valide, l'état interne. Afin de réaliser ce que j'ai besoin pour effectuer certaines vérifier avant de créer un objet, probablement dans son constructeur. C'est tout bon jusqu'à ce que je décide de faire cette vérification, une partie de la logique métier. Alors, comment puis-je organiser un objet métier pour être réalisable uniquement grâce à une méthode dans ma classe de logique métier, mais jamais directement? Le premier désir naturel d'utiliser un bon vieux "ami" mot clé de C++ en deçà avec C#. Nous avons donc besoin d'autres options...
Essayons quelques exemple:
public MyBusinessObjectClass
{
public string MyProperty { get; private set; }
public MyBoClass (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;
}
}
Tout est ok jusqu'à ce que vous vous rappelez que vous pouvez toujours créer MyBusinessObjectClass instance directement, sans contrôle de l'entrée. Je voudrais exclure cette possibilité technique tout à fait.
Donc, ce que pense la communauté de cela?