Les lignes peuvent être un peu floues, mais je le vois de cette façon:
Une classe / interface de service permet à un client d'interagir avec certaines fonctionnalités de l'application. Ceci est généralement public, avec un sens commercial. Par exemple, une TicketingService
interface peut vous permettre de le faire buyTicket
, sellTicket
etc.
Une classe d'assistance a tendance à être cachée du client et est utilisée en interne pour fournir un travail sur plaque de chaudière qui n'a pas de signification de domaine métier. Par exemple, supposons que vous vouliez convertir une date en un horodatage afin de l'enregistrer dans votre magasin de données. Vous pourriez avoir une classe utilitaire appelée DateConvertor
avec une convertDateToTimestamp
méthode qui effectue ce traitement.
Les services ne sont pas simplement étroitement liés aux DAO, c'est un modèle / terme d'utilisation plus large que la persistance
Les classes auxiliaires ne violent pas SRP si elles sont codées conformément à ce principe. Autrement dit, chaque méthode doit faire une chose et une chose bien, la classe doit effectuer un type d’aide d’utilitaire (par exemple, la conversion de date) et le faire correctement.
Martijn Verburg
la source
Classe de service: contient la logique métier.
Helper Class: cette classe est un type de composant réutilisable.
la source
Vous avez confondu deux principes non liés. Les services et les classes d'assistance ne sont pas connectés. En particulier, le terme "classe de service" est trompeur - je pense que vous faites référence à un "service" qui est à un niveau d'abstraction plus élevé que les classes. Un service se caractérise par
Cette définition change légèrement en fonction de votre contexte. Cependant, le point critique est que le terme "service" désigne un niveau abstrait , le niveau d' architecture et la connaissance du domaine . La "classe d'assistance" est un modèle de conception (même s'il s'agit d'un anti-modèle car ils ont tendance à évoluer vers des classes de blob ou de dieux) faisant référence à une classe qui encapsule des opérations génériques (notez que ce niveau est inférieur et qu'il est connecté) connaissance de l' application / de la solution ). Je suis conscient du fait qu’il n’existe pratiquement aucun logiciel ne contenant aucune classe d’assistance, mais c’est quand même une mauvaise pratique.
la source
Il faut se méfier des multiples définitions de «service» dans DDD:
Service d'application: ils font partie de la couche application et communiquent avec le domaine et la couche de données. Ils constituent l'interface par laquelle les systèmes externes / l'interface utilisateur interagissent avec le système DDD.
Service de domaine: il peut être utilisé par le domaine ou la couche d'application et contient une logique métier qui ne s'intègre pas parfaitement dans une entité particulière.
Service d'infrastructure: ils sont utilisés par le domaine pour communiquer avec des ressources externes.
Les classes auxiliaires ont tendance à contenir des morceaux de code ou des algorithmes qui pourraient être réutilisés par plusieurs entités. Par conséquent, vous ne pouvez pas réellement accéder à des entités sans violer le principe DRY. Ils sont probablement plus proches des services de domaine, en ce sens qu'ils remplissent le même objectif (externaliser la logique métier des entités), mais ils le font pour des raisons différentes.
la source