企业集成要面临的一个重要问题就是解耦,尽量限制要集成的各个组件之间的关联性,以防止修改其中一个组件会影响其它的组件,来保证各个组件可以独立的进化。
常见的耦合性:Type-level coupling、system-level coupling
type-level coupling,在程序中一个明显的标志,就是一个类调用了大量的其他类
system-level coupling,一个系统调用另一个目标系统时,需要知道目标系统的详细实现才可以调用就属于系统间耦合了,另外,看书里面的意思,系统间耦合还包括其他对目标系统的假设,比如我要调用一个服务时,必须假设服务当前可用,就也算是系统间耦合,这个是不是有点过分了。
Dependency Injection,依赖注入解耦type-level coupling
Event-driven architecture,在该结构中,复杂的程序被拆分成多个组件,各组件之间通过事件进行交互
Synchronous communication,在同步通信中,一个组件在向目标系统发送请求后,就会一直等待直到目标系统发送回复才接着往下运行。
asynchronous Communication,在异步通信中,一个组件在向目标系统发送请求后,不用等待目标系统发送回复,它可以接着往下运行。
enterprise integration styles:
文件传输:两个系统生成文件,文件的有效负载就是由另一个系统处理的消息。该类风格的例子之一是针对文件轮询目录或FTP目录,并处理该文件。
共享数据库:两个系统查询同一个数据库以获取要传递的数据。一个例子是你部署了两个EAR应用,它们的实体类(JPA、Hibernate等)共用同一个表。
远程过程调用:两个系统都暴露另一个能调用的服务。该类例子有EJB服务,或SOAP和REST服务。
消息:两个系统连接到一个公用的消息系统,互相交换数据,并利用消息调用行为。