表数据网关模式

19-03-26 jdon
         

此模式属于数据源架构模式  目录,此目录属于  企业应用程序体系结构模式

目的

充当数据库表的网关的对象。一个实例处理表中的所有行。

这里Gateway表示  封装对外部系统或资源的访问的对象。

说明

1.Table Data Gateway保存用于访问单个表或视图的所有SQL:选择,插入,更新和删除。其他代码调用其方法进行与数据库的所有交互。表网关的想法是为每个数据库表提供一个网关类。

2.在应用程序逻辑中混合使用SQL可能会导致多个问题,因此Table Data Gateway模式将SQL查询与代码分开。

如何运作

一个表数据网关有一个简单的界面,通常由几个查找方法来从数据库获取和更新,插入数据和删除的方法。每种方法都将输入参数映射到SQL调用中,并针对数据库连接执行SQL。表数据网关通常是无状态的,因为它的作用是来回推送数据。

表数据网关模式将SQL查询与源代码分离。

何时使用它

1.表数据网关可能是最简单的数据库接口模式,因为它可以很好地映射到数据库表或记录类型上。它也很自然地封装了数据源的精确访问逻辑。我最少使用Domain Model,因为Data Mapper在域模型和数据库之间提供了更好的隔离。

2.为了使用表数据网关,您将为数据库中的每个表创建一个。但是,对于非常简单的情况,您可以使用单个表数据网关来处理所有表的所有方法。

3.使用表数据网关封装数据库访问的一个好处是,相同的接口既可以用于使用SQL来操作数据库,也可以用于使用存储过程。

示例代码

让我们为PersonGateway的示例代码创建一个类图,以演示这种模式。

第1步:创建域模型或POJO类。

public class Person{
    private int id;
    private String firstName;
    private String lastName;
    private String gender;
    private int age;
    // Getter and Setter methods
}

步骤2:创建一个Person Gateway 类,其中包含用于访问单个表或视图的所有SQL:选择,插入,更新和删除。其他代码调用其方法进行与数据库的所有交互。

public class PersonGateWay{
    public RecordSet find(int id){
        // find person record by id.
    }
    public RecordSet findByFirstName(){
        // find person by first name.
    }
    public void update(String firstName, String lastName, String age){
        // Update person entity.
    }
    public void insert(String firstName, String lastName, String gender,String age){
         // insert person entity.
    }
    public void delete(int id){
        // Delete person record by id from database.
    }
}