我是SOA的新手.这是指个人CF实例,它们通过远程Web服务调用相互通信?如何处理诸如错误处理和服务器中断之类的事情?如果ESB的每个部分都在ColdFusion中,ESB是否会对架构有益?
DB层怎么样?他们应该共享一个巨大的数据库,还是应该自己以自己的方式存储?
谢谢
首先,你想要完成什么? SOA对于需要相对容易地更改并且可供新程序员访问的系统非常有用.另一方面,您倾向于进行性能权衡,因为您最终会隔离持久性 – 因此它的交互发生在应用程序服务器而不是数据库中.通常这种性能权衡是一个非问题,但如果你正在开发一个高通量事务系统,你可能需要通过在数据库中放入一些算法并使这些算法违反你的服务细分来妥协.因此,如果你想要专业人士而不是特别关注缺点,那么首先阅读一些关于这个主题的适用书籍:
> Martin Fowler的Patterns of Enterprise Application Architecture – 特别关注Service Layer模式
> Domain Driven Design Quickly很多(不必要的IMO)同名书籍的缩写版本减去“快速”,这有助于您思考如何定义服务和每个下面的对象层次结构.
您希望趋势是具有高级服务对象的设计,其关系通过dependency injection到service locator容器进行管理.在ColdFusion案例中,ColdSpring就是一个例子.然后允许object mocking,这样您就可以轻松进行单元测试.例如,如果服务存在于其他服务器上,那么本地具有代理的服务对象将作为依赖项传递.为了测试,这些代理被模拟,因此他们不必与远程服务器通信.
关于错误处理和服务器中断.我假设你主要关心处理本地服务器控制之外的问题.这是使用服务代理对象的另一个原因.让这个对象负责处理超时,错误的响应值等 – 实际上是anti corruption layer.
至于数据库共享,我将构建我的表关系以反映我的服务对象关系.因此,如果有问题的表具有仅通过服务相关的数据,我将不会强制执行任何外键约束.因此,尽管它们可能位于同一个数据库中,但这并不重要.这使您可以将这些服务和数据库表移动到其他位置,而对代码的更改相对较少.