Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-05-2011 03:24:08

nuxwin
Membre
Lieu: Caen (14)
Date d'inscription: 17-03-2011
Messages: 66

Service Layer - Domain Model - Behaviors

Bonjour à tous ;

J'ai passé cette dernière semaine à me "ruiner le cerveau" en lisant tout à tas de documents pour tenter de trouver la meilleurs architecture pour mon application, et plus particulièrement pour ce qui concerne la couche métier.

Les développeurs d'expériences savent que le ZF conduit à une vision assez réduite du M de MVC, notamment par le fait que les composants qu'il fournit ne permettent pas réellement aux développeurs de produire un Domain Model - PofEAA p116 digne de ce nom. J'ai donc parcouru le Web à la recherche du lingot d'or, lu le livre de Martin Flower -  PofEAA, lu le live du Gang of Four (GoF - version français que j'ai acheté et qui est vraiment misérable tant la traduction est mauvaise....) et voici ce que j'en ai conclu:

Les composants fournis par le ZF (je pense notamment à Zend_Db_Table & cie...) ne permettent pas d'implémenter le design pattern Domain Model notamment par le fait qu'étendre Zend_Db_Table ne permet pas de séparer la logique métier de la couche persistance. Aussi, la couche persistance (sans traitement intermédiaire) est directement exposée dans la couche représentation (Le V de MVC). Il y'a aussi tous un tas d'autres raisons qui rendent ces composants incompatibles avec ce design pattern. D'ailleurs, c'est bien normal puisque Zend_Db_Table implémente un design pattern bien spécifique Table Data Gateway - PofEAA p144...

J'ai donc continué mes recherches et suis "tomber" sur un article très intéressant ( http://www.angryobjects.com/2009/03/30/ … -framework ) qui affectionne particulièrement la couche service. Malheureusement, là encore, il apparaît qu'une utilisation intensive de la couche service peur aboutir à un modèle dit "anémique" ( http://martinfowler.com/bliki/AnemicDomainModel.html ), ce qui appauvri grandement l'idée même du modèle de domaine dans la mesure où il fournira plus aucun comportement..

Ainsi, si il semble que la couche service puisse est utilisée de concert avec le modèle, ce n'est pas pour autant que le modèle dans être amputé de tout comportement.

------------------

Première question

Qu'est qui peut faire partie de la couche service et qu'est qui peut faire parti du modèle exactement.. (je parle en terme de comportement)

Deuxième et dernière question:

J'utilise un Data Mapper - PofEAA p165 pour l'accès au données. Ce Data Mapper est donc responsable de la persistance des données.

Si je veux supprimer une entité, je vais nécessairement invoquer une méthode delete() sur mon Data Mapper. La question est: Est-ce que l'objet de domaine (l'entité) doit fournir le comportement lié à sa suppression:

Code:

[lang=php]
$postDataMapper = new postDataMapper();
$post = postDataMapper->find(1);

$post->delete();

Ce qui implique que le modèle lui même ait connaissance du Data Mapper et donc, ne respecte pas le fait que normalement, un objet de domaine ne doit pas avoir connaissant du Data Mapper. D'ailleurs autoriser ceci me fait plus penser à une implémentation du design pattern Active Record - PofEAA p160 qu'autre chose...


Merci pour vos éclaircissements.

Note: Je n'ai peux être pas encore tous appréhender de tous ces design pattern architecturaux. Ainsi donc, je vous remercie d'être indulgent à mon égard si je dis quelques bêtises.

Dernière modification par nuxwin (01-05-2011 13:02:46)

Hors ligne

 

#2 01-05-2011 12:13:48

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: Service Layer - Domain Model - Behaviors

hello,
j'aimerais juste rappeler une chose, les design pattern sont des guides, qui peuvent aide a résoudre des problèmes mais ne doivent en aucun cas être appliqué tel quel! C'est un guide vers une solution, une remarque général de bonne pratique mais en aucun cas LA solution. Il est rare qu'un design pattern s'applique tel quel.

Sinon il ne faut pas oublier que PHP ce n'est pas du java et que a vouloir trop complexifier certains choses ont fini par perdre l'essence même du langage qui se veux simple ...

Je laisse la parole a ceux qui pourront t'aider


Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

#3 01-05-2011 13:49:59

nuxwin
Membre
Lieu: Caen (14)
Date d'inscription: 17-03-2011
Messages: 66

Re: Service Layer - Domain Model - Behaviors

Bonjour Grummfy ;

Je vous remercie pour cette première réponse, et je dois vous dire que je suis totalement d'accord avec vous sur le fait que les patrons de conception proposent et n'imposent pas - qu'il ne s'agit que de propositions pouvant répondre à des problèmes bien définis. Ce faisant le but du du patron de conception sus-visé en référence est justement d'éviter d'avoir un couplage fort entre le modèle et la couche persistance d'où ma question.

Pour ce qui est de votre dernière remarque a propos de PHP, je ne suis là plus tout à fait d'accord. Certes PHP est simple, peut être utilisé de bien des manières mais dès quand commence à coder de manière OO, il devient nécessaire d'appliquer certains concepts, suivre certaines règles pour profiter de toute la puissance offerte par le langage.

Cordialement ;

Dernière modification par nuxwin (01-05-2011 13:56:20)

Hors ligne

 

#4 02-05-2011 09:12:45

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Service Layer - Domain Model - Behaviors

Bonjour,

Pour répondre à tes questions.

La couche Service peut prendre plusieurs formes. Dans le cas d'un modèle anémique, c'est la couche de services qui assure tout le comportement métier et la mise en relation des objets. Je n'aime pas cette approche. C'est celle recommandée par le framework JAVA Spring MVC. Le seul avantage est que tout le comportement est réuni dans une seule et même couche, ce qui peut faciliter la maintenance d'une application.

Un service dans le sens métier, est simplement une couche qu'on isole pour répondre à des cas d'utilisation. Si UML est utilisé pour modéliser l'application, un service peut correspondre à un Package de cas d'utilisation.
Je préfère cette approche et avoir un modèle métier consistant, les services ne faisant que mettre en intéraction l'application et le modèle.

Mais comme tu le dis, utiliser Zend_Db tel qu'il est donné ne permet pas ça. Utiliser un mapper est une bonne solution, mais qui coûte chèr en développement. Je pense que la meilleure solution aujourd'hui reste Doctrine 2 qui agit autour du modèle, de manière transparente. Il faut garder en tête que tu auras toujours une limitation quelque part.

Sinon, un des rôles principal de la couche de services est de faciliter la distribution d'une API, en exposant par exemple des Websercices.

Pour ta 2ème question, c'est non. Si tu implémentes un véritable modèle métier, les objets métiers ne doivent en aucun cas être responsables de leur propre persistance. Ils ne doivent rien connaitre de la persistance, ce sont des objets purs smile

Le modèle métier est censé être facilement transportable d'une application à l'autre, quelque soit le framework utilisé, c'est le coeur de l'application.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages