Ensuite, CreateInstance () examine le type donné pour voir s`il s`agit d`une classe ou d`une interface. S`il s`agit d`une classe, elle utilise ce type dans Activator. CreateInstance (). S`il s`agit d`une interface, elle suppose que l`interface utilise une convention d`affectation de noms dans son nom. En d`autres cas, si le nom complet de l`interface est «csla. abstractions. BusinessObjects. Contracts. IPerson», le code recherche une classe appelée «csla. abstractions. BusinessObjects.
Person». Cette logique est dans la méthode d`extension GetConcreteType (): la première moitié est d`écrire un test pour DependentPerson. Ce test garantira que l`enregistreur est appelé dans DataPortal_Create (): J`ai utilisé ces techniques sur un certain nombre de projets au cours des deux dernières années, et il a fait une grande différence dans la façon dont j`utilise CSLA. Il faut un peu de temps pour comprendre comment toutes les pièces s`adaptent ensemble, mais une fois que c`est fait, les choses finissent par être assez propre tout au long de l`application. Je vous ai montré une façon comment vous pouvez utiliser les interfaces CSLA pour fournir des abstractions et la gestion des dépendances – n`hésitez pas à expérimenter avec ces techniques pour vos propres exigences d`application spécifiques. Par exemple, vous voudrez peut-être supprimer ObjectFactory de l`image entièrement en enregistrant les interfaces BO dans votre conteneur et le client fonctionne juste avec les interfaces BO. Mais quoi que vous choisissiez de faire, vous avez maintenant cette capacité de fournir les abstractions et les dépendances dans CSLA avec juste un peu d`effort. Cette fonctionnalité peut fournir des fonctionnalités riches pour les applications de bureau et les application Web. Une note de prudence serait de tenir compte de la surcharge pour les applications Web à haute transaction. la fonction d`annulation de niveau n nécessitera le stockage de l`état antérieur d`une application généralement accessible par réflexion. Il s`agit d`une pratique courante dans les applications de bureau où les modifications doivent être «appliquées». Dans les conceptions basées sur le Web, le stockage ajouté peut poser une surcharge inutile, car les modifications sont généralement envoyées en lot et ne requièrent pas le même niveau de capacité «annuler».
La raison pour laquelle nous avons besoin d`une référence à un objet basé sur ILifetimeScope sur le BO est due au fait que le comportement par défaut d`Autofac avec des dépendances résolues (voir http://code.google.com/p/autofac/wiki/DeterministicDisposal pour plus de détails). Par conséquent, nous devons garder une trace de la portée utilisée pour résoudre les dépendances sur une BO spécifique. Mais, nous ne voulons pas que chaque BO soit forcé d`avoir une portée. C`est pourquoi BusinessBaseScopeCore a été créé. Il fournit au développeur un choix. Si elle n`a pas besoin de dépendances sur son BO, il n`y a aucune raison d`avoir une portée, afin qu`elle puisse utiliser BusinessBaseCore. (Je vais couvrir ce que DependencyAttribute est et pourquoi il est nécessaire dans un instant). Comment pouvons-nous utiliser ces trois méthodes à notre avantage? CSLA .NET a été exposé dans expert C# Business Objects [3] et expert One-on-One Visual Basic .NET Business Objects ISBN 1-59059-145-3, tous deux écrits par Lhotka. Bien que CSLA et CSLA .NET aient été initialement ciblés vers les langages de programmation Microsoft, la plupart de l`infrastructure peut être appliquée à la plupart des langages orientés objet. Alors, comment une BO qui a besoin d`une dépendance look différent de celui qui n`est pas? Créons un BO DependentPerson qui utilise un enregistreur simple en tant que dépendance: CSLA (architecture logique évolutive basée sur les composants) a été initialement ciblé vers Visual Basic 6 dans le livre Visual Basic 6,0 Business Objects by Lhotka.
Avec l`avènement de Microsoft .NET, CSLA a été complètement réécrit à partir de la base, sans aucun code reporté, et appelé CSLA .NET.
Últimos Comentários