Question

J'ai une couche commerciale (BL) et une couche de données (DL). J'ai un objet O avec une collection d'objets enfants de type C. Je voudrais fournir une sémantique comme le o.children.add ("info") suivant. Dans le BL, je voudrais avoir une classe statique que toutes les classes de couche commerciales utilisent pour obtenir une référence à l'instance de Datalayer actuelle. Y a-t-il un problème avec cela ou dois-je utiliser le modèle d'usine pour limiter la création à une classe du BL qui connaît l'instance DL.


Permettez-moi de clarifier. Dans le passé, lors de la définition de DL, je crée une interface IDL que le DL implémente. Les seuls objets que je permette d'être créés à partir de mon BL sont les usines qui, dans leurs constructeurs, prennent une référence à l'IDL

C'EST À DIRE

   IDL idlRef = new DataLayer();  
   IBlFactory iFac = new BLFactory(IDL);
   IBLa = IBlFactory.Geta(...);

Comme j'ai essayé de travailler en statistique et des singletons de mon système, mon usine crée tous les objets et transmet toujours la référence de l'IDL aux nouveaux objets. Certains membres de mon équipe se sont plaints de mon utilisation abondante des interfaces et des usines et souhaitent utiliser directement les cours de béton du BL.

Donc, le problème est que si vous avez un objet qui peut être créé, c'est-à-dire un nouvel objet, vous êtes mieux coupé en utilisant l'usine. C'EST À DIRE

IBLA oBLA = iFac.GetBLA();

ou forçant le client à toujours passer la référence au DL au nouvel objet. C'est-à-dire Bla obla = new Bla (idlRef);

ou la testabilité serait vraiment blessée en ayant une propriété statique dans le BL.

Static IDL CurrentDL;

Permettre, bien qu'avec une certaine rupture de l'encapsulation, un style plus succinct en supposant que chaque objet BL saura ce qu'est le CurrentDL.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top