6

我有一点问题,我不确定如何解决它。我的模型组件包含大约 200 个不同的业务对象(订单、客户、产品等)。

当有人想要获取订单时,我不想返回整个对象图。相反,我想简单地返回对象并延迟加载(甚至异步加载)其他部分。这似乎会导致很多“获取(对象名称)”服务:

  • GetOrder(int id)
  • 获取客户(int id)
  • 获取产品(int id)
  • 等等

我不想创建 200 种不同的方法,每个 Get 操作一个。我意识到我可能会做类似的事情:GetObject(string type, int id),然后以某种方式使用反射来取回适当的对象,但我认为这更糟(可能)。

相反,如果我使用 T4 模板来自动化创建每个不同服务的工作,那就更好了……但它仍然让我担心一件事……性能

暴露 200 多个不同的服务(每个对象一个)是不是很糟糕?

4

1 回答 1

4

根据我的经验,WCF + 实体框架 + 延迟加载 + 深度对象图 + 性能要求 = 潜在的大问题。

没有什么神奇的灵丹妙药可以解决所有问题,我最终得到以下结果:

  • 延迟加载已禁用。我认为延迟加载只会产生更多可以解决的问题:如果使用不当,会出现性能问题,难以捕获异常(因为 SQL 请求可以随时执行,而不仅仅是在最初从D B)
  • 修改了 T4 模板,所以导航属性的设置器现在是private. 不再收集自动序列化到客户端的对象
  • 通过 WCF 以及自定义 POCO(如果您想在单个 WCF 调用中获取多个实体)发送到客户端的急切加载的对象图。
  • 没有通用存储库模式。客户端只是调用一些GetXXXX/GetXXXByYYY方法。甚至GetXXXByYYYWithZZZZWithWWWW是预加载属性的名称ZZZZWWWW是的,可能有很多方法,但只有在应用程序客户端实际需要时才构建它们,并且您知道自己在做什么。这极大地有助于获得良好的表现。

暴露 200 多个不同的服务(每个对象一个)是不是很糟糕?

这些是单个服务中的 200 多个不同的操作(我想)。如果您的客户端确实需要访问您的所有服务器端实体,那么是的,200 多个操作是可以的,这里没有魔法。

于 2013-07-05T16:25:28.443 回答