Question

J'ai essayé d'envelopper ma tête autour de la façon d'exposer mes objets de domaine au client. Que j'utilise un client riche ou j'utilise le web, je veux utiliser le MVP et les modèles du référentiel.

Ce que je suis en train d'envelopper ma tête est autour de la façon dont j'expose mon dépôt et le modèle, qui sera sur le serveur. Est-il même possible d'exposer des objets d'affaires complexes qui ont l'état via un service Web, ou devrai-je utiliser une technologie propriétaire qui n'est pas la langue / plate-forme agnostique, comme .Net Remoting, EJB, COM +, DCOM, etc?

D'autres contraintes sont que je ne veux pas avoir à garder le chargement de l'objet de domaine complexe de la base de données ou de transmettre tout sur le fil chaque fois que je veux faire une opération. Une certaine logique complexe peut-être que certaines zones de l'écran peuvent être désactivées ou invisibles sur la base des utilisateurs des autorisations en combinaison avec l'état de l'objet. La validation et l'information des messages d'erreur devront également être affichées à l'utilisateur. Je veux être en mesure d'appeler logiquement beaucoup de mes opérations d'objet de domaine comme si elle était en cours d'exécution sur la même machine.

Avec le web, vous avez libre cours. Vous ne devez pas exposer vos objets à travers les frontières de services, de sorte que vous pouvez les rendre riche que vous le souhaitez. Je suis en train de créer une architecture N-Teir qui est riche et fonctionne lorsque le client appelle le modèle est sur une autre machine.

Était-ce utile?

La solution

Vous pouvez exposer vos objets de domaine comme tout autre objet à travers des services REST ou Web. Je pense que la clé est de comprendre que vous devrez exposer des services qui offrent une valeur commerciale dans un seul appel, et ceux-ci ne correspondent pas nécessairement 1: 1 à vos dépôts. Ainsi, alors que vous sur le serveur peut attendre un appel de service unique à utiliser plusieurs référentiels et effectuer diverses agrégations, les choses que vous exposer sur tout type de service Web devrait être plus ou moins les résultats complets. Les opérations que vous exposez sur le service ne doit pas exposer les dépôts individuels, mais plutôt se concentrer sur les opérations significatives qui offrent une valeur commerciale donnée.

J'espère que cela aide un peu.

Autres conseils

Vous pouvez utiliser un SOAP pour formater .Net Remoting, mais le service résultant sera probablement difficile à consommer en tant que service, et il sera hargneux très bavard.

Si vous voulez que votre modèle de domaine à être consommé en tant que service, il doit être conçu comme un service.

Comme indiqué dans la conception axée sur de domaine, un service est apatride, donc il ne sera pas exposer directement vos objets. Votre service doit exposer les méthodes qui fournit des opérations commerciales significatives qui seront exécutées comme une seule unité.

considèrent généralement que le modèle de votre client est dans un autre contexte borné parce que ses préoccupations seront un peu différent de celui sur le serveur.

  

Ce que je suis en train d'envelopper ma tête   comment j'expose mon dépôt et   modèle, qui sera sur le serveur. Est   il même possible d'exposer complexe   objets d'affaires qui ont l'état via un   service Web, ou devrai-je utiliser un   la technologie propriétaire qui ne   langue / plate-forme agnostique, comme .Net   Remoting, EJB, COM +, DCOM, etc?

Un bon modèle de domaine va être très comportementale et conçu autour du domaine du problème (et vos discussions avec des experts du domaine), je donc argumenter contre la conception à être exposés aux consommateurs à distance (de la même manière que sa conception à partir de la base de données ou GUI première est une mauvaise idée).

Au lieu de cela je regarde en utilisant un style comme REST ou par messagerie et décider de l'interface que vous souhaitez exposer, puis à la carte / du domaine. Donc, si vous êtes allé avec REST vous souhaitez concevoir vos ressources et de l'API (URL, de représentations, etc.) et vous auriez besoin de le remplir à partir du modèle de domaine.

Si cela devient des modèles non naturel, alors vous pouvez toujours avoir plusieurs, par exemple la cartographie d'un séparé présentation en lecture seule modèle spécifique pour les mêmes données source (ou qui enveloppe le modèle de domaine comportemental complexe) est une approche que j'ai utilisé plusieurs fois.

  

D'autres contraintes sont que je   ne veulent pas avoir à garder le chargement de la   objet de domaine complexe de la   base de données ou le transmettre dans le   câbler chaque fois que je veux faire une   opération

Regardez la mise en cache HTTP et supportant de multiples représentations d'une ressource, regardez également la mise en cache au sein de votre solution d'accès aux données.

  

Validation et message d'erreur   l'information devra également être   affiché à l'utilisateur. je veux être   capable d'appeler logiquement beaucoup de mon   opérations d'objet de domaine comme si elle était   en cours d'exécution sur la même machine.

Vous pouvez représenter cela comme une ressource ou look plus probable à des codes d'état HTTP et les corps de réponse que vous voudriez utiliser dans ces situations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top