2011-01-23 3 views
1

Tout d'abord, laissez-moi vous expliquer ce que je veux faire. Je veux dévolop un serveur qui va écouter les demandes des clients. Mon serveur a une architecture modulaire.Méthodes à distance, gestion centralisée de l'accès à distance

Par exemple, il existe un module Offre. Le module d'offre comporte 4 projets: Action, Message, Entité et Requête. Le projet Query contient généralement les classes qui contiennent des méthodes distantes.

Première question: Comment puis-je développer mon serveur de façon à ce qu'il gère toutes les transactions, les requêtes de façon centralisée. Je veux dire, toutes les requêtes doivent être routées depuis cette classe de gestion centrale vers le module demandé et sa méthode distante. J'ai besoin de tes idées. Deuxièmement: Supposons que dans mon module d'offre, la classe ProductQuery du projet Query comporte 10 méthodes, mais 5 d'entre elles sont distantes. La classe CustomerQuery a 15 méthodes, 3 d'entre elles sont des méthodes distantes. Je souhaite obtenir toutes les méthodes distantes dans un projet de requête (par exemple, dans le projet Query de OfferModule ou dans le projet Query du module Accounting) dans un assembly pour la communication à distance. Par exemple dans un assembly OfferQuery.

J'ai besoin de votre aide. Je vous remercie!

+0

En ce qui concerne votre première question, vous êtes trop peu spécifique pour obtenir des réponses raisonnables. Nous aurions besoin de savoir quels frameworks vous utilisez pour votre composant serveur, et à quoi ressembleraient des requêtes typiques et concrètes. S'il vous plaît fournir plus de détails. – stakx

Répondre

0

Je vais laisser votre première question sans réponse, car elle ne peut pas être raisonnablement répondu dans sa forme actuelle.


Ma compréhension de votre deuxième question:

Tout d'abord, laissez-moi essayer de comprendre la mise en page de base de l'architecture de votre serveur:

+--------+ 1  1..n +--------+ 1 1..n +---------+ 
    | Server |<>------------| Module |<>-----------| Project | 
    +--------+    +--------+    +---------+ 

« Il y a un serveur, qui a ou est constitué de 1 ou plusieurs modules, dont chacun a ou est composé de plusieurs projets. " J'ai pris cela directement à partir de votre question. La première chose que je ne comprends pas ici, est-ce que nous parlons de composants d'exécution, ou de la mise en page de votre solution de code source?

Plus concrètement, vous semblez avoir cette hiérarchie des modules, des projets et des classes:

Server 
| 
+---- Accounting (module) 
|  ¦ 
|  ? (projects) 
| 
+---- Offer (module) 
¦  | 
?  +---- Action (project) 
     | 
     +---- Message (project) 
     | 
     +---- Entity (project) 
     | 
     +---- Query (project) 
      | 
      +---- ProductQuery (class) 
      | 
      +---- CustomerQuery (class) 
      ¦ 
      ? 

Et si je comprends bien, vous voulez maintenant rassembler toutes les méthodes d'interrogation à distance « » de par exemple ProductQuery et CustomerQuery dans une classe OfferQuery courante ... est-ce correct?


direction proposée vers une solution pour votre deuxième question:

Maintenant, étant donné que vous n'avez pas fourni beaucoup de détails sur les technologies et les cadres que vous utilisez, je vais aussi rester un peu vague:

Je pense que ce que vous essayez de faire n'est pas une bonne approche. Pourquoi? Parce que vous allez mettre des choses complètement indépendantes dans une seule classe, basée sur l'idée qu'elles sont toutes des méthodes de "requête". Mais ils interrogent des choses très différentes: par ex. Offers, Products, Customers. Ce n'est pas une bonne conception orientée objet parce que, bien, ce n'est pas "orienté domaine". C'est orienté sur les requêtes.

Je pense que vous feriez bien de développer un modèle d'objet propre (domaine). Concevez des classes autour des entités logiques de votre système (par exemple, les offres, produits, comptes, clients, etc. déjà mentionnés).Gardez les classes correspondantes complètement exemptes de méthodes de requête.

Maintenant, où vont les requêtes? Vous pouvez rechercher des mappeurs de modèle relationnel objet (OR/M) pour cette tâche. Hibernate (ou avec .NET, NHibernate) ou Entity Framework pour .NET de Microsoft sont de bonnes options. Ils mapperont votre modèle de domaine sur une base de données relationnelle et effectueront la création, l'interrogation, la mise à jour et la suppression dans la base de données pour vous.

+0

Vous décrivez brièvement mon architecture de projets.Mais je définis réellement le modèle d'objet propre.Toutes les requêtes sur l'offre seront dans la classe d'opération oferr modules.Vous avez raison parfois j'utiliserai la requête client dans le module d'offre mais toutes les requêtes courantes sont dans une classe de référentiel dans le module de base.Becouse de mon anglais limité Je ne peux pas expliquer dans les détails.Mon classe d'opération dans un module obtient un message spécifié, exécute il sotre à DB ou vice versa.Je comprends ce que vous m'offrez.J'ai étudié sur l'entité framwork.Bu pour cette projet je dois utiliser ce genre d'architecture.Merci beaucoup pour vos soins – Trusik

+0

@Trusik, si vous ne pouvez pas ou ne voulez pas utiliser quelque chose comme Entity Framework, alors je vous exhorte encore * pas * à mettre en place une requête sans rapport classes dans une classe de requête unique. Conservez une classe de requête par entité de domaine (comme vous l'avez maintenant). Au lieu de cela, essayez de supprimer toutes les méthodes qui ne sont pas liées à une requête à partir de vos classes de requêtes et placez-les ailleurs. – stakx

+0

@ stakx.Je ne suis pas encore l'architecture de conception complètement.Je suis ouvert à vos offres.Je comprends ce que vous dites et je vais essayer beaucoup plus propre modèle de domaine que vous dites.Il y a de toute façon recueillir toutes les méthodes atributed à distance dans un dll sur construire? – Trusik