J'ai commencé à construire une application en 3 couches (DAL, BL, UI) [elle traite principalement du CRM, de certains rapports de vente et de l'inventaire].
Un collègue m'a dit que je devais passer au modèle de couche de service, que les développeurs sont venus au service de modèle de leur expérience et que c'est la meilleure approche pour concevoir la plupart des applications. Il a dit qu'il serait beaucoup plus facile de maintenir l'application à l'avenir de cette façon.
Personnellement, j’ai l’impression que cela ne fait que compliquer les choses et que je ne vois pas l’avantage qu’il en tirerait qui justifierait cela.
Cette application a une petite interface utilisateur supplémentaire qui utilise quelques-unes (mais seulement quelques-unes) des fonctions de l'application de bureau. Je me suis donc retrouvé en train de dupliquer du code (mais pas beaucoup). Juste à cause de la duplication de code, je ne voudrais pas le convertir en service, mais il a dit que je devrais l'utiliser de toute façon parce qu'en général c'est une très bonne architecture, pourquoi les programmeurs sont si passionnés par les services ??
J'ai essayé de chercher sur Google mais je suis toujours confus et je ne peux pas décider quoi faire.
la source
With CRM, Sales and Inventory there will be a lot of CRUD-type use cases of which there is almost always a one-to-one correspondence with Service Layer operations
- s’il s’agissait de plusieurs interfaces utilisateur, comment le CRUD intervient-il ici? Et si je n'avais pas besoin de plusieurs interfaces utilisateur alors que le CRUD fonctionnait bien avec les services, je ne créerais toujours pas une couche de services, si je comprenais bien, et j'espère vraiment que je l'aurais fait parce que je préfère garder les choses simples (la couche de services est une désordre à mon opinion inexpérimentée)Ajouter une couche de service parce que vous avez évalué l’idée et conclu que c’est la meilleure approche: bonne
Ajouter une couche de service parce que c'est ce que font tous les enfants cools: mauvais
Si votre instinct dit que vous n'en avez pas besoin, n'en faites pas.
L’un des développements les plus décevants dans le monde de la programmation au cours des 10 dernières années est qu’il s’est tourné de manière ennuyeuse vers la «mode», les gens suivant les tendances et les pionniers comme si c’était les chaussures de cette saison. Ne tombez pas dans ce piège. Parce que la saison prochaine, "tout le monde" vous dira que vous auriez dû le concevoir autrement.
Il n'y a rien de mal à faire avec une couche de service - c'est une approche particulière dont la pertinence doit être évaluée sur ses mérites techniques pour le projet en cours. Ne vous sentez pas obligé de substituer les opinions des autres à votre propre jugement.
la source
La décision de créer une couche de service dépend de nombreux facteurs. J'ai créé des couches de service dans le passé pour les raisons suivantes.
Cas 1: Vous créez une fonctionnalité de base qui doit être utilisée par une multitude de clients. La couche de service crée des fonctionnalités pour différents clients afin de puiser dans les fonctionnalités fournies immédiatement.
Cas 2: Vous hébergez normalement du code dans une application, mais vous utilisez une bibliothèque tierce pour laquelle vous disposez de licences limitées. Dans ce cas, vous avez une ressource que vous souhaitez utiliser partout, mais seulement un nombre limité d’entre elles. Si vous l'hébergez derrière un service, votre organisation tout entière peut en tirer parti à partir de leurs applications sans avoir à acheter une licence pour chaque hébergement individuel.
Cas 3: Vous créez une fonctionnalité pour que des tiers puissent communiquer avec vous. Dans votre exemple, vous pouvez configurer un point de terminaison d'inventaire pour permettre aux fournisseurs de vous transmettre des messages sur les envois de produits entrants.
Cas n ° 4: Vous avez analysé votre code à l’échelle de votre entreprise et constaté que des équipes distinctes avaient créé la même chose (la mise en œuvre était légèrement différente). Avec une couche de service, vous pouvez choisir la ou les meilleures approches et maintenant, vous pouvez implémenter le processus de la même manière pour toutes les équipes en les faisant appeler. Un autre avantage de la logique centralisatrice réside dans la découverte de bogues. Maintenant, vous pouvez déployer le correctif une fois et tous les clients profitent des avantages en même temps.
Tout cela étant dit, il existe des inconvénients potentiels pour une couche de service.
Le point principal est que ce n’est pas toujours un slam dunk de rendre votre système orienté services. D'après mon expérience, c'est généralement une bonne idée (j'ai tendance à structurer les applications de cette manière), mais ce n'est pas une décision automatique. En fin de compte, vous devez peser le pour et le contre et prendre la décision qui convient à votre situation.
la source
La plupart des couches de service que j'ai vues sont un désordre complet. Les services ont tendance à avoir beaucoup de méthodes différentes, 1500 LOC ne sont pas rares. Les différentes méthodes n'ont rien en commun, mais partagent du code. Il en résulte un couplage élevé et une faible cohésion . Cela viole également OCP , car chaque fois qu'une nouvelle opération est nécessaire, vous devez modifier le code au lieu d'étendre la base de code. Une couche de service bien construite est théoriquement possible, mais je ne l'ai jamais vue en pratique.
CQRS résout ces problèmes et vous évite de créer l'une de ces couches de service procédurales.
la source
L'ajout d'une interface (une couche de service est un type d'interface) prend du temps. Un bon prend beaucoup de temps pour concevoir et tester. Il est très important de bien faire les choses du premier coup car le changer plus tard casse tous les clients. En outre, considérez que vous ne saurez probablement pas ce qui doit être dans cette interface tant que vous n’avez pas un deuxième client avec des besoins légèrement différents. Maintenir un service est un projet sans fin en soi.
Dans la plupart des organisations, si vous vous adressez à votre sponsor et demandez-leur: "Voulez-vous que les autres départements bénéficient de (réutiliser) ce système que nous développons avec votre budget?" ils vont se moquer de vous. Faites-le d'abord fonctionner pour votre sponsor, puis commencez à réutiliser ce code (sur l'heure de votre département).
Si vous savez pertinemment que la fonctionnalité que vous écrivez aujourd'hui sera réutilisée par plusieurs clients de service différents, envisagez de concevoir une couche de service dès le premier jour. Si vous n'êtes pas sûr ou s'il existe déjà de nombreuses inconnues dans le projet, commencez par travailler avec quelque chose de simple, puis séparez-le en service et client ultérieurement si vous avez le temps et le budget impartis. Il est beaucoup plus facile d’obtenir l’interface de service dès le premier essai avec un système en fonctionnement.
PS Si vous travaillez en Java, Joshua Bloch fournit de nombreux conseils en matière d’interface fantastiques tout au long de son livre Effective Java.
la source
Je suis d'accord avec toi. Il n'est pas nécessaire d'inclure une couche supplémentaire si vous utilisez une seule interface utilisateur.
DAL, BL et UI / Controller sont une bonne combinaison pour concevoir une application. Si vous envisagez d'utiliser une seule interface utilisateur, il n'est pas nécessaire de préparer une couche supplémentaire. L'inclusion d'une couche supplémentaire dans l'application n'augmente que les efforts / le temps de développement.
Une autre méthode consiste à utiliser plusieurs interfaces utilisateur dans votre application. Il est bon de disposer d'une couche de service pour gérer les interfaces utilisateur dans ce cas.
Dépassement de pile: discussion sur le modèle de couche de service
la source
Je contesterais que votre BL est votre couche de service. Un lieu central où repose votre logique métier. Cela devrait être une DLL pouvant être utilisée par tout ce qui a besoin de cette logique. Ensuite, vous pouvez ajouter une couche d'API Web si votre application aura une interface utilisateur différente.
la source