51 votes

Quelqu'un a une expérience du monde réel de l'AAPC?

La principale application web de mon entreprise est en train de pleurer pour un joli ensemble de bibliothèques pour le rendre d'une certaine façon maintenable et évolutive, et un de mes collègues a suggéré l'AAPC. J'ai donc acheté le livre, mais que :

les programmeurs ne pas lire des livres plus

Je voulais mesurer la SOFlow d'opinion de la communauté.

Voici donc mes questions:

  1. Combien de gens sont à l'aide de l'AAPC?
  2. Quels sont les avantages et les inconvénients?
  3. Après la lecture de ce ne AAPC vraiment pas avec TDD?
  4. Quelles sont mes options?
  5. Si vous avez arrêté de l'utiliser ou de décidé contre pourquoi?

72voto

Brad Leach Points 9012

Avant de me répondre spécifiquement à votre question, j'aimerais mettre un peu de pensées vers le bas. Est-AAPC droit pour votre projet? Il dépend. Je considère personnellement comme l'AAPC pour l'ordinateur de bureau en fonction des demandes qui n'a pas valeur de test d'unité comme une priorité élevée. L'AAPC est l'endroit idéal si vous voulez facilement passer à un niveau n de l'application. L'AAPC a tendance à avoir quelques flack, car il ne permet pas de pure tests unitaires. Ce qui est vrai, cependant, comme rien dans la technologie, je crois qu'il n'y a Pas Un seul Vrai Chemin. Les tests unitaires peuvent ne pas être quelque chose que vous êtes entreprise pour un projet spécifique. Ce qui fonctionne pour une équipe et un projet peut ne pas fonctionner pour une autre équipe ou un autre projet.

Il y a aussi beaucoup d'idées fausses en ce qui concerne l'AAPC. Il n'est pas un ORM. il n'est pas un concurrent de NHibernate (en fait, à l'aide de l'ÉLCV, Business Objects & NHibernate que l'accès aux données ajustement vraiment bien ensemble). Il formalise le concept d'un Objet Mobile.

1. Combien de personnes sont à l'aide de l'AAPC?
Basé sur l' AAPC Forums, je dirais il y a un certain nombre de l'AAPC en fonction des projets. Honnêtement, même si, je n'ai aucune idée de combien de personnes sont réellement l'utiliser. Je l'ai utilisé dans le passé sur les deux projets.

2. Quels sont les avantages et les inconvénients?
S'il est difficile de la résumer en une courte liste, voici quelques-uns des pro/con qui viennent à l'esprit.
Pour:

  • Il est facile d'obtenir de nouveaux développeurs jusqu' pour la vitesse. L'AAPC livre et de l'échantillon app sont d'excellentes ressources pour obtenir jusqu'à la vitesse.
  • Le système de Validation est vraiment de classe mondiale et a été "emprunté" pour beaucoup, beaucoup d'autres non-AAPC des projets et des technologies.
  • n-Annulation de Niveau au sein de votre entreprise les objets
  • Config changement de ligne pour la n-Tier de l'évolutivité (Note: même pas un recompilation est nécessaire)
  • Technologies clés sont extraits de la "véritable" du code. Lors de la WCF a été mise en place, il a eu peu d'impact sur L'AAPC code.
  • Il est possible de partager votre business objects entre windows et de projets web.
  • L'AAPC favorise la normalisation des comportements plutôt que de la normalisation des données (en laissant la base de données pour la normalisation des données).

Inconvénients:

  • Difficulté de test unitaire
  • Le manque de Séparation des Préoccupations (généralement votre business objects ont accès aux données de code à l'intérieur d'eux).
  • Comme l'AAPC favorise la normalisation de comportement, plutôt que de la normalisation des données, ce qui peut conduire à des objets métiers qui sont nommés de la même façon, mais ont des finalités différentes. Cela peut entraîner une certaine confusion et un sentiment que vous n'êtes pas réutiliser les objets de façon appropriée. Cela dit, une fois physiologiques saut est pris, il fait plus de sens -, il semble inapproprié de la structure des objets de "l'ancien".
  • Ce n'est pas "à la mode" pour construire des applications de cette manière. Vous avez de la difficulté à obtenir des développeurs qui sont passionnés par la technologie.

3. Après la lecture de ce ne AAPC vraiment pas avec TDD?
Je n'ai pas trouvé un moyen efficace de faire TDD avec l'AAPC. Cela dit, je suis sûr qu'il ya beaucoup des gens plus intelligents que moi qui peut avoir essayé, avec plus de succès.

4. Quelles sont mes options?
Domain-Driven-Conception est la prise en big push en ce moment (et à juste titre - c'est fantastique pour certaines applications). Il y a également un certain nombre de tendances intéressantes développe à partir de l'introduction de LINQ (et LINQ to SQL, Entity Framework, etc). Fowlers livre PoEAA, les détails nombreux modèles qui peuvent être adaptés à votre demande. Notez que certains modèles sont en concurrence (c'est à dire Active d'Enregistrement et de stockage), et sont donc destinés à être utilisés pour des scénarios spécifiques. Alors que l'AAPC ne correspond pas exactement à aucun des modèles décrits dans ce livre, il ressemble le plus à Active Record (bien que je pense qu'il est à courte vue de réclamer une correspondance exacte pour ce modèle).

5. Si vous avez arrêté de l'utiliser ou de décidé contre pourquoi?
Je n'ai pas bien recommander l'AAPC pour mon dernier projet, parce que je crois que la portée de la demande est trop grande pour les avantages de l'AAPC fournit.
Je voudrais ne pas utiliser l'AAPC sur un projet web. Je crois qu'il y a d'autres technologies mieux adaptées aux applications du bâtiment dans cet environnement.

En résumé, tandis que l'AAPC est rien mais une balle en argent, il est approprié pour certains scénarios.

Espérons que cette aide!

23voto

Gregory Higley Points 4509

Après avoir lu toutes les réponses, j'ai remarqué que pas mal de gens ont des idées fausses au sujet de l'AAPC.

Tout d'abord, l'AAPC est pas un ORM. Comment puis-je dire que, donc, définitivement? Parce que Rockford Lhotka a déclaré lui-même à de nombreuses reprises dans des interviews sur le .NET Roches et Hanselminutes podcasts. Rechercher tout l'épisode où Rocky a été interviewé et il va de l'état dans des termes sans équivoque. Je pense que c'est la plus critique d'un fait, pour les personnes à comprendre, parce que presque toutes les idées fausses au sujet de l'AAPC flux de croire que c'est un ORM ou d'essayer de l'utiliser comme un.

Comme Brad Leach a fait allusion dans sa réponse, l'AAPC objets de modèle de comportement, bien qu'il serait plus précis de dire qu'ils modéliser le comportement de données, les données étant partie intégrante. L'AAPC est pas un ORM parce que c'est complètement agnostique à propos de la façon dont vous parlez à votre magasin de données. Vous devez utiliser une sorte de couche d'accès aux données avec l'AAPC, peut-être même un ORM. (Je ne. Maintenant j'utilise Entity Framework, qui fonctionne à merveille.)

Maintenant, sur les tests unitaires. Je n'ai jamais eu aucune difficulté tests unitaires mon AAPC objets, parce que je n'ai pas mis mon code d'accès aux données directement dans mon business objects. Au lieu de cela, j'ai utiliser une variante du modèle de référentiel. Le référentiel est consommée par l'AAPC, pas l'inverse. En échangeant dans un faux référentiel pour mes tests unitaires et en utilisant le portail de données, BOOM! c'est simple. (Une fois Entity Framework permet l'utilisation de POCOs, ce sera encore plus propre.)

Tout cela vient de réaliser que l'AAPC est pas un ORM. Il peut consommer un ORM, mais il n'en est pas un.

Des acclamations.

Mise à JOUR

J'ai pensé que je ferais un peu plus de commentaires.

Certaines personnes ont dit que l'AAPC est détaillé par rapport à des choses comme LINQ to SQL et ainsi de suite. Mais ici nous sommes en train de comparer des pommes à des oranges. LINQ to SQL est un ORM. Il offre certaines choses que l'AAPC ne le fait pas, et l'AAPC offre certaines choses L2S n'est pas, comme intégrée de la validation et de la nde la couche de persistance à travers les différentes données à distance portails. En fait, je dirais que la dernière chose que, à la nde la couche de persistance, surpasse toutes pour moi. Si je veux utiliser Entity Framework ou LINQ to SQL sur le net, je dois mettre quelque chose comme WCF entre les deux, et qui multiplie le travail et la complexité énormément, au point où je pense que c'est beaucoup plus détaillé que l'AAPC. (Maintenant, je suis un fan de la WCF, REST et SOA, mais l'utiliser lorsque vous en avez vraiment besoin, par exemple lorsque vous souhaitez exposer un service à des tiers. Pour la plupart des applications métiers, il n'est pas vraiment nécessaire, et l'AAPC est un meilleur choix.) En fait, avec la dernière version de l'AAPC, Rocky fournit un WCFDataPortal, que j'ai utilisé. Il fonctionne très bien.

Je suis un fan de SOLIDE, TDD, et d'autres logiciels modernes, les principes de développement, et de les utiliser dans la mesure du possible. Mais je pense que les avantages de l'AAPC l'emportent sur certaines des objections de ceux orthodoxies, et en tout cas, j'ai réussi à faire de l'AAPC fonctionne très bien (et facilement) TDD, ce n'est donc pas un problème.

19voto

Damian Hickey Points 1389

Oui, j' (messagerie unifiée, nous) largement utilisé pour modéliser notre processus logique qui a été principalement lié aux données des formulaires dans une application windows forms. L'application est un système de trading. L'AAPC est conçu pour être à la couche juste en dessous de l'INTERFACE utilisateur.

Si vous pensez à votre type de ligne complexe l'application d'entreprise, vous pouvez avoir un formulaire avec plusieurs champs, de nombreuses règles pour les domaines (y compris les règles de validation de champ), vous pouvez appeler une boîte de dialogue modale à modifier certains des enfants de l'objet, vous pouvez être en mesure d'être en mesure d'annuler ces boîtes de dialogue et revenir à un état précédent. L'AAPC prend en charge cette.

C'est les inconvénients sont qu'il a un peu d'une courbe d'apprentissage.

L'essentiel à retenir est d'utiliser l'AAPC de modéliser la manière dont un utilisateur interagit avec les formes sur une application. Le moyen le plus efficace pour moi, c'était pour la conception de l'INTERFACE utilisateur et comprennent que c'est le flux, le comportement et les règles de validation avant la construction de l'AAPC objets. N'avez pas votre AAPC objets en voiture de conception d'INTERFACE utilisateur.

Nous avons également constaté qu'il est très utile d'être en mesure d'utiliser l'AAPC affaires objets côté serveur pour valider les objets envoyés par les clients.

Nous avons également eu des mécanismes intégrés pour effectuer la validation de manière asynchrone à l'encontre de service web (c'est à dire la vérification de la limite de crédit de la gamme d'une contrepartie à l'encontre d'un maître).

L'AAPC applique une forte séparation entre votre INTERFACE utilisateur, BusinessLogic et de la Persistance et nous avons écrit une charge de tests unitaires contre eux. Il peut ne pas être strictement TDD parce que vous êtes au volant de conception de l'INTERFACE utilisateur, cela ne veut pas dire qu'il n'est pas testable.

La seule vraie alternative c'est de créer votre propre modèle \ business objects, mais assez vite, en fin de mise en œuvre de fonctionnalités que l'AAPC offre de la boîte (INotifyPropertyChanged, IDataErrorInfo, PushState, PopState etc.)

13voto

Andy Points 164

J'ai utilisé de l'AAPC pour un projet et il a très bien fonctionné et rendre les choses beaucoup plus simple et plus propre.

Au lieu d'avoir votre équipe de rédaction de business objects dans leur propre style personnel, nous savons qu'ils ont une norme commune pour travailler contre.

//andy

11voto

Eric Z Beard Points 18473

J'ai eu l'expérience il y a plusieurs années. C'est une architecture fantastique, mais très complexe, difficile à comprendre ou à modifier, et c'est la résolution d'un problème que la plupart de nous à développer des applications sur le web n'ont pas forcément besoin. Il a été développé plus pour windows et des applications basées sur la manipulation de l'annulation à plusieurs niveaux, avec un accent lourd sur les opérations de la logique. Vous allez probablement entendre des gens dire que, depuis les applications web sont de requête-réponse au niveau de la page, il est inapproprié, mais avec style AJAX web apps peut-être que cet argument ne tient pas autant d'eau.

Il a une très profonde du modèle objet, et il peut prendre un certain temps pour vraiment envelopper votre cerveau autour d'elle. Bien sûr, beaucoup de choses peuvent changer dans quelques années. Je serais intéressé d'entendre d'autres avis récents.

Toutes choses considérées, il ne serait pas mon premier choix de l'architecture.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X