SOA 架构数据访问
Posted
技术标签:
【中文标题】SOA 架构数据访问【英文标题】:SOA architecture data access 【发布时间】:2010-12-12 18:08:07 【问题描述】:在我的 SOA 架构中,我有几个 WCF 服务。 我的所有服务都需要访问数据库。 我应该创建一个专门的 WCF 服务来负责所有数据库访问吗? 或者,如果我的每个服务都有自己的数据库访问权限,是否可以?
在一个版本中,我在一个服务中只实例化了一个实体层,而所有其他服务依赖这个服务。 在另一个中,实体层在我的每个服务中重复。
第一个版本的主要缺点是耦合引发。 其他版本的缺点是层重复,可能是 SOA 不好的做法?
那么,Stack Overflow 的好人怎么看?
【问题讨论】:
【参考方案1】:只是我个人的看法,如果您为所有数据库访问创建一个服务,那么多个服务依赖于一个服务,这在某种程度上违背了 SOA 的要点(即服务是自治的),正如您所阐明的那样。当你谈到层重复时,如果每个服务都有自己的数据要处理,那真的是重复吗?我意识到您可能拥有与关系数据库交互的相同方式,或者从 OOA 时代回来,您拥有一个为您封装数据访问的通用类库。这是我为自己苦苦挣扎的事情之一,但我认为每个服务都有自己的数据层没有问题。事实上,在Michele Bustamante's book(第 1 章 - 第 8 页)中,她实际上描述了这一点并添加了“服务封装业务组件和数据访问”。如果您注意到每个服务都有一个单独的 DALC 层。这是个好问题。
【讨论】:
我的思路是一样的,只是他的 DAO 层有一部分是所有 WCF 服务都依赖于共享的,因此为每个服务设置一个单独的数据库似乎不起作用,直到他修复了他的数据库代码。 问题是我无法按位拆分数据库。所有 WCF 服务都需要该数据库中的某些表。例如,我有一项服务负责从车辆 gps 位置发出警报。所以我有描述警报的表格,还有关联警报和车辆的表格,当然还有一个车辆表格。我有另一个服务负责解析 gps 位置,然后它需要表 Vehicule 和 GpsPosition 表。事实上,我有所有服务都需要的“核心”表,例如车辆、用户、车队。不知道怎么拆分...【参考方案2】:听起来好像您有多个服务但只有一个数据库。
如果这是正确的,那么您实际上并不拥有纯 SOA 架构,因为服务不是独立的。 (没有纯 SOA 架构并没有错,它通常是正确的选择)
添加额外的 WCF 层只会使您的解决方案复杂化并减慢速度。
我建议您创建一个包含所有数据访问并由每个 WCF 服务引用的单个数据访问 dll。这样你就没有任何重复的代码。由于您只有一个数据库,因此在任何情况下,对数据库/数据层的任何更改都需要重新部署所有服务。
【讨论】:
【参考方案3】:为什么不直接使用依赖注入框架,如果他们当前使用的是同一个数据库,那么只允许他们共享相同的代码,如果它们在同一个项目中,那么他们都将使用同一个 dll。
这样以后,如果您需要放入一些您不希望其他人共享的代码,您可以进行更改并创建一个新的 DAO 层。
如果有某个单例所有人都将使用,那么您可以在注入 dao 层时将其注入。
但是,这将要求他们使用相同的 DI 框架控制器。
【讨论】:
【参考方案4】:SOA 带来的真正好处在于它减少了应用程序之间的链接数量。
过去,我曾与以多种不同方式完成此任务的组织合作。有些数据层是集成的,有些是抽象的。
我见过最成功的做法是为每个应用程序/数据库创建通用数据层服务,然后根据新创建的数据层创建更高级别的服务。
【讨论】:
以上是关于SOA 架构数据访问的主要内容,如果未能解决你的问题,请参考以下文章