1

我目前正在开发一个设计为三层架构的应用程序。它由一个管理网站、一个 WCF Web 服务和一个数据库组成。当然,网站并不直接连接数据库,所以所有的请求和响应都必须通过服务。“问题”是这个应用程序涉及多个实体,对于每个实体,我必须支持基本的 CRUD 操作等等,这使得该服务现在在单个端点中有 30 多个方法。由于我已经不得不增加最大消息大小,我开始问自己是否将所有这些方法都放在一个服务中是不是太多了。你怎么看?我有什么选择?

4

3 回答 3

2

我真的不能给你一个好的答案,因为它取决于你的应用程序的要求和复杂性。通常,CRUDy 服务接口是您应该避免的反模式。数据层和服务层之间不应该存在一对一的映射。如果有,那么服务层就有点不自量力了。SOA 是一个巨大的话题,我才刚刚开始思考,但我的理解是 SOA 应该封装许多操作的逻辑。即(身份验证、授权、日志记录、缩放、事务等)

http://msdn.microsoft.com/en-us/library/ms954638.aspx

你听说过存储库模式吗?这是一种软件设计模式,其中特定的类/程序集封装了将数据输入和输出数据库所需的逻辑。它比使用完整的服务更轻,如果您想要一种将应用程序与数据库解耦的好方法,它可能就是您所需要的。Repository 模式的一个非常简洁的特性是,您可以将 Repository 的所有方法设为接口,然后制作 MockImplementation 以独立于数据库对业务/UI 层执行测试。

http://msdn.microsoft.com/en-us/library/ff649690.aspx

于 2011-10-16T20:59:35.540 回答
1

这个问题没有真正的具体答案。无论哪种方式,这都是一种权衡。尽量牢记单一职责原则。几个选项是:

  • 为每个数据类型创建一个端点,将 CRUD 操作放入每个端点。这将意味着通过维护更多的端点配置。
  • 将您的方法分成多个文件,但使用部分类将它们留在一个类中。
  • 如果您所做的只是对每种数据类型进行 CRUD 操作,则可以改用 WCF 数据服务/OData。
于 2011-10-16T21:02:40.273 回答
0

在 WCF 服务上实现重复的 CRUD 功能可能会很痛苦,但如果该服务未在全球范围内公开(因此您不必为身份验证/授权支付很多费用),您可以通过使用其中一个来节省大量时间二:ADO.NET 数据服务或 WCF RIA 服务。

单个服务上的 30 种方法是否是一个糟糕的设计 - 这还不清楚。这就像问一个有 30 名成员的班级是否是一个糟糕的设计——有些人会说肯定是这样,大多数人会评论“这取决于你在做什么”。

然而,将 HTTP 用于 CRUD 会带来一些限制——您提到的其中之一。除非您增加消息大小,否则您将无法插入/更新大批量。除非您以某种方式以显式方式涉及通过 http 的事务,否则您也可能在事务处理方面遇到一些严重问题。

于 2011-10-16T21:10:30.030 回答