本篇介绍企业应用架构的基本模式之一入口(Gateway)模式。
入口(Gateway)
入口是一个封装外部系统或资源访问的对象。带来系统上的简单性,可测试性,使得依赖资源的替换变得更加容易。
背景
当访问外部资源时,通常要获得它们的API,但这些API可能具有天然的复杂性,因为它们必须考虑到资源自身的特性。任何要理解一个资源就必须首先通晓基API——无论是对关系数据库的JDBC,还是针对XML的W3C和JDOM,皆是如此。这使得软件的可读性差,修改变得困难,例如将来的某时将关系数据库的一些数据转移到XML,解决这一问题可以使用入口(Gateway)模式
做法
事实上这是一个十分简单的包装器(wrapper)模式。封装外部资源,创建一个简单的API并用入口将对该API的调用转移到外部资源上。
使用场景
如果必须通过一个复杂的接口与可能位于系统之外的事务交互,应当考虑入口模式。使用入口将复杂性封装起来,而不要让复杂性蔓延到整个系统中,使用入口几乎没有什么弊端,同时又可以使系统中入口类之外的代码可读性更高。有以下的好处:
-
使系统更易测试。
-
使你用一种资源来替换另一种资源变得更为容易。
-
即使你认为资源不会发生任何变化,你仍然可以从使用入口模式所带来的简单性和可测试性中获益。
入口模式与外观模式(Facade)和适配器(Adpter)以及中介者模式(Mediator)的区别
-
外观模式对较复杂的API进行简化,其通常由服务的作者提供,而且是通过的。入口则是客户方为了其特定应用而编写的。此外,一个外观通常暗示一个与原始接口不同的接口,但在入口可以只是简单地照搬被包装的接口,这种入口用于将来替换资源或测试目的。
-
适配器模式修改某一已经实现的接口,使其与另一个你所用到的接口相匹配。入口模式通常没有一个已存在的接口,虽然你可能会使用一个适配器来将一个实现映射到一个入口类的接口上。此时适配器是入口类实现的一部分。
-
中介者模式通过用来将多个对象解耦,使得它们无需互相引用,而只要与中介者发生关联。入口模式通常只涉及两个对象,而且被包装的资源并不知道入口的存在。
本文首发于个人微信公众号:webguan ;欢迎您的关注