求教,SOA架构是如何和数据库解耦的

niss 2012-11-20 10:09:14
现在大家都在讨论SOA,面向服务架构,也就是将功能划分成不同的服务的方式来进行部署,比如认证服务,授权服务等等等等,他们相互独立,便于维护,可是,我想不通的一件事情是,很多服务都是需要对数据库进行数据存取来支撑的,那么这些服务怎么和数据库解耦呢?
服务应该是可以单独部署的,那支撑他的数据库怎么办呢,是每个服务一个数据库?还是所有服务共享数据库?
...全文
287 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
niss 2012-11-20
  • 打赏
  • 举报
回复
引用 7 楼 Net_Java_dram 的回复:
你可以再你的解决方案下加一个项目,专门提供接口的项目 比如你的项目有10个模块,那么该项目下就有10个文件,每个文件里有多个接口(该模块对外提供的接口),而每个文件的接口的实现应该是在他们各自的模块里.这时候要调用其它模块的东西,就不依赖于它模块本身,而是依赖于这一个项目,这里会有一个实现的问题,因为 Interface=new Class();而这个Class 又在别人的模块里,还需要引用,……
受教了,我去查查资料
黄瓜黄瓜 2012-11-20
  • 打赏
  • 举报
回复
你可以再你的解决方案下加一个项目,专门提供接口的项目 比如你的项目有10个模块,那么该项目下就有10个文件,每个文件里有多个接口(该模块对外提供的接口),而每个文件的接口的实现应该是在他们各自的模块里.这时候要调用其它模块的东西,就不依赖于它模块本身,而是依赖于这一个项目,这里会有一个实现的问题,因为 Interface=new Class();而这个Class 又在别人的模块里,还需要引用,没有做到解耦,所以要用到MEF框架,动态加载程序集,在写一个工具类去实例化出对应的实现类class,这时候就解耦了。 比如现在登录独立出来一个模块,而你需要调用登录的验证 bool result=ObjectInit<Interface>.Init.Login(username,password); ObjectInit 这就是个工具类 会实例化出接口对应的实现类。 Init 是ObjectInit的属性 得到实现类 Login 对应的方法
niss 2012-11-20
  • 打赏
  • 举报
回复
引用 4 楼 Net_Java_dram 的回复:
你有一个很大的项目,需要很多Team一起协同开发,相互依赖怎么办,这时候就应该将Team各自负责的模块分割开来,让每个Team都拥有自己独立的Service,其他Team依赖的将其公布成对外的Service,数据库也需要划分,如果对其他Team的表要进行增删改,不能直接操作,需要调用Service来完成,查询的话没有多大关系,可以直接select 其他Team的表……
就是这个问题,我希望在service和数据访问中间能有一个缓冲地带,使双方不出现紧耦合,比如认证服务他要去验证用户密码,那么就要涉及到DAL,可是我希望在service层面上他看到的就是实体对象和接口,可以让这个服务脱离数据库,想在哪部署都行,只要为他依赖的DAL操作提供一个实现就可以了,具体是什么实现,比如是什么数据库,是什么表,是什么字段,service就不管了,他只管接收username和password,以及一个验证操作,我想要的是这个
wanghui0380 2012-11-20
  • 打赏
  • 举报
回复
哈哈,又被名词绕晕了 啥SOA??啥Rest?? 如果我告诉你,生产车间已经生产了一批白酒,你把这酒倒进红瓶滴他就是叫SOA高档酒,倒进绿瓶滴他就叫REST中档酒,灌进塑料瓶里就是散装BIL,你会啥想法? 怎么对外提供和数据库没啥关系。 生产是生产,灌装是灌装,他们天生就是解耦滴。 就拿google api,淘宝api来说,博客园那些喜欢和你绕名词的人就可以跟你说,他是SOA滴,他是REST滴---那有如何google 后面就没有入库过程,淘宝后面就没有查库过程? 总归来说这块东西是对外提供部分,而非逻辑实现部分,你逻辑实现该怎么实现就怎么实现
黄瓜黄瓜 2012-11-20
  • 打赏
  • 举报
回复
你有一个很大的项目,需要很多Team一起协同开发,相互依赖怎么办,这时候就应该将Team各自负责的模块分割开来,让每个Team都拥有自己独立的Service,其他Team依赖的将其公布成对外的Service,数据库也需要划分,如果对其他Team的表要进行增删改,不能直接操作,需要调用Service来完成,查询的话没有多大关系,可以直接select 其他Team的表,当然让其他Team提供视图更好,以后如果他改表,只需要改视图就OK. 我们现在的项目就是这样的,每个模块的Service独立开来。没个页面都有独立的Service以便于开发页面的开发人员自己写自己的Service,当然部署时 每个Team的Service合成一个Service的。
niss 2012-11-20
  • 打赏
  • 举报
回复
引用 1 楼 licai1210 的回复:
同类的和相关的可以共享数据库,独立的可以单独数据库。我认为认证和授权就可以共享数据库
我的意思是,我想把认证服务独立出来重用,像组件一样,可是发现他和后台数据库没法完全分开....
天下如山 2012-11-20
  • 打赏
  • 举报
回复
貌似WCF就是这样的架构吧. 不是懂 没啥概念 码农的悲哀.
licai1210 2012-11-20
  • 打赏
  • 举报
回复
同类的和相关的可以共享数据库,独立的可以单独数据库。我认为认证和授权就可以共享数据库

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧