.net 远程方法,远程处理的集中管理

.net 远程方法,远程处理的集中管理,.net,remoting,projects-and-solutions,.net,Remoting,Projects And Solutions,首先让我解释一下我想做什么。我想开发一个能够监听客户端请求的服务器。我的服务器有一个模块化的体系结构 例如,有一个报价模块。报价模块有4个项目:操作、消息、实体和查询。查询项目通常包含包含远程方法的类 第一个问题:如何开发服务器,使其集中管理所有事务和查询。我的意思是,所有请求都应该从这个中央管理类路由到请求的模块及其远程方法。我需要你的想法 第二:假设在我的报价模块中,查询项目的ProductQuery类有10个方法,但其中5个是远程的。CustomerQuery类有15个方法,其中3个是远程

首先让我解释一下我想做什么。我想开发一个能够监听客户端请求的服务器。我的服务器有一个模块化的体系结构

例如,有一个报价模块。报价模块有4个项目:操作、消息、实体和查询。查询项目通常包含包含远程方法的类

第一个问题:如何开发服务器,使其集中管理所有事务和查询。我的意思是,所有请求都应该从这个中央管理类路由到请求的模块及其远程方法。我需要你的想法

第二:假设在我的报价模块中,查询项目的ProductQuery类有10个方法,但其中5个是远程的。CustomerQuery类有15个方法,其中3个是远程方法。我希望将一个查询项目(例如OfferModule的查询项目或Accounting module的查询项目)中的所有远程方法获取到一个程序集以进行远程处理。例如,在一个OfferQuery程序集中


我需要你的帮助。谢谢大家!

我不回答你的第一个问题,因为它不能以目前的形式得到合理的回答


我对第二个问题的理解:

首先,让我尝试了解您的服务器体系结构的基本布局:

  +--------+  1     1..n  +--------+  1    1..n  +---------+
  | Server |<>------------| Module |<>-----------| Project |
  +--------+              +--------+             +---------+
如果我没弄错的话,您现在想从公共
OfferQuery
类中收集所有“远程”查询方法,例如
ProductQuery
CustomerQuery
。。。这是正确的吗


第二个问题的解决方案建议方向:

现在,鉴于您没有提供关于所使用的技术和框架的太多细节,我也会稍微含糊其辞:

我认为你想做的不是一个好方法。为什么?因为你要把完全不相关的东西放到一个类中,基于它们都是“查询”方法的思想。但他们查询的内容却截然不同:例如,
提供
产品
客户
。这不是一个好的面向对象设计,因为它不是“面向领域的”。它是面向查询的

我认为您最好开发一个干净的对象(域)模型。围绕系统中的逻辑实体(例如,前面提到的产品、客户、客户等)设计类。保持相应的类完全没有查询方法


现在,查询去哪里了?您可以查看此任务的对象关系模型映射器(OR/M)。Hibernate(或与.NET、NHibernate一起使用)或Microsoft的.NET实体框架都是不错的选择。他们会将您的域模型映射到关系数据库,并为您在数据库中进行所有创建、查询、更新和删除操作。

关于您的第一个问题,您的回答太不具体,无法得到合理的答案。我们需要知道服务器组件使用的是什么框架,以及典型的具体查询是什么样子的。请提供更多细节。您简要描述了我的项目体系结构。但我实际上定义了干净的对象模型。所有关于报价的查询都将在oferr模块操作类中。您是对的,有时我会在报价模块中使用客户查询,但所有常见查询都在核心模块的一个存储库类中。由于我的英语水平有限,我无法详细解释。我在一个模块中的操作类得到指定的消息,执行到DB,反之亦然。我理解你提供给我的内容。我学习了实体框架。对于这个项目,我必须使用这种架构。非常感谢你的支持care@Trusik,如果您不能或不想使用实体框架之类的东西,然后,我仍然敦促您不要将不相关的查询类放在一个查询类中。每个域实体保留一个查询类(正如您现在所拥有的那样)。相反尝试从您的查询类中删除所有与查询无关的方法,并将它们放在其他地方。@stakx。我还没有完全设计体系结构。我对您的提议持开放态度。我理解您所说的,我将尝试像您所说的更干净的域模型。有没有办法在构建时在一个dll中收集所有远程atributed方法?@Trusik:绝对没有必要以某种方式重新组织DLL中的方法。在编译解决方案之前,只需将您的方法放在正确的项目中,它们就会最终放在正确的DLL中。考虑DLL并不是一个有用的视角:以后,您将不会维护DLL,而是维护源代码!因此,请清理您的源代码:在此处删除一个方法并将其重新插入正确的位置。这将使您的代码更有条理,因此更易于理解和导航。在您的情况下,属性不能也不会导致混乱,并且是错误的做法。@stakx。我将按照您所说的物理分离。我将在这里为您的修改编写详细的体系结构。Thanx很多
Server
|
+---- Accounting (module)
|     ¦
|     ? (projects)
|
+---- Offer (module)
¦     |
?     +---- Action (project)
      |
      +---- Message (project)
      |
      +---- Entity (project)
      |
      +---- Query (project)
            |
            +---- ProductQuery (class)
            |
            +---- CustomerQuery (class)
            ¦
            ?