求教,SOA架构是如何和数据库解耦的
现在大家都在讨论SOA,面向服务架构,也就是将功能划分成不同的服务的方式来进行部署,比如认证服务,授权服务等等等等,他们相互独立,便于维护,可是,我想不通的一件事情是,很多服务都是需要对数据库进行数据存取来支撑的,那么这些服务怎么和数据库解耦呢?
服务应该是可以单独部署的,那支撑他的数据库怎么办呢,是每个服务一个数据库?还是所有服务共享数据库?
------解决方案--------------------同类的和相关的可以共享数据库,独立的可以单独数据库。我认为认证和授权就可以共享数据库
------解决方案--------------------貌似WCF就是这样的架构吧.
不是懂 没啥概念 码农的悲哀.
------解决方案-------------------- 你有一个很大的项目,需要很多Team一起协同开发,相互依赖怎么办,这时候就应该将Team各自负责的模块分割开来,让每个Team都拥有自己独立的Service,其他Team依赖的将其公布成对外的Service,数据库也需要划分,如果对其他Team的表要进行增删改,不能直接操作,需要调用Service来完成,查询的话没有多大关系,可以直接select 其他Team的表,当然让其他Team提供视图更好,以后如果他改表,只需要改视图就OK.
我们现在的项目就是这样的,每个模块的Service独立开来。没个页面都有独立的Service以便于开发页面的开发人员自己写自己的Service,当然部署时 每个Team的Service合成一个Service的。
------解决方案--------------------哈哈,又被名词绕晕了
啥SOA??啥Rest??
如果我告诉你,生产车间已经生产了一批白酒,你把这酒倒进红瓶滴他就是叫SOA高档酒,倒进绿瓶滴他就叫REST中档酒,灌进塑料瓶里就是散装BIL,你会啥想法?
怎么对外提供和数据库没啥关系。 生产是生产,灌装是灌装,他们天生就是解耦滴。
就拿google api,淘宝api来说,博客园那些喜欢和你绕名词的人就可以跟你说,他是SOA滴,他是REST滴---那有如何google 后面就没有入库过程,淘宝后面就没有查库过程?
总归来说这块东西是对外提供部分,而非逻辑实现部分,你逻辑实现该怎么实现就怎么实现
------解决方案--------------------
你可以再你的解决方案下加一个项目,专门提供接口的项目 比如你的项目有10个模块,那么该项目下就有10个文件,每个文件里有多个接口(该模块对外提供的接口),而每个文件的接口的实现应该是在他们各自的模块里.这时候要调用其它模块的东西,就不依赖于它模块本身,而是依赖于这一个项目,这里会有一个实现的问题,因为
Interface=new Class();而这个Class 又在别人的模块里,还需要引用,没有做到解耦,所以要用到MEF框架,动态加载程序集,在写一个工具类去实例化出对应的实现类class,这时候就解耦了。
比如现在登录独立出来一个模块,而你需要调用登录的验证
bool result=ObjectInit<Interface>.Init.Login(username,password);
ObjectInit 这就是个工具类 会实例化出接口对应的实现类。
Init 是ObjectInit的属性 得到实现类
Login 对应的方法