`

数据源架构模式之表数据入口

阅读更多

数据源架构模式有四种:表数据之口,行数据入口,活动记录和数据映射器。

在了解它们之前,需对领域模型模式有一定的了解,可先参看

业务逻辑层之事务脚本与领域模型业务逻辑层之表模块

 

一、概念

表数据入口(Table Data Gateway):充当数据库表访问入口的对象。一个实例处理表中所有的行(有没有想起表模块)。

表数据入口包含了用于访问单个表或视图的所有SQL,如CRUD等,其他代码调用它的方法来实现所有与数据库的交互。

 

二、实现简单的表数据入口

为方便理解,先给出事例,后面根据事例再作详细的分析。

<?php
class DB {
    /**
     * 这只是一个执行SQL的演示方法
     *
     * @param string  $sql 需要执行的SQL
     */
    public function query( $sql ) {
        echo "执行SQL: ", $sql, " <br />";
        return 1;
    }
}

/**
 * order表的表数据入口
 */
class OrderGateway extends DB {

    /**
     * 查询所有指令
     *
     * @return <type>
     */
    public function findAll() {
        $sql = "SELECT * FROM order";
        return DB::query( $sql );
    }

    /**
     * 根据名字查找指令
     *
     * @param string  $name
     * @return bool
     */
    public function findByName( $name ) {
        $sql = "SELECT * FROM order WHERE `name` = '" . $name . "'";
        return DB::query( $sql );
    }

    /**
     * 更新指令数据
     *
     * @param string  $key  关键字
     * @param array   $data 需要更新的数据
     */
    public function update( $id, $data ) {
        if ( empty( $id ) || !is_array( $data ) ) {
            return FALSE;
        }

        $sql = "UPDATE order SET ";
        foreach ( $data as $field => $value ) {
            $sql .= "`" . $field . "` = '" . $value . "',";
        }
        $sql = substr( $sql, 0, -1 );

        $sql .= " WHERE id = " . $id;

        return DB::query( $sql );
    }

    /**
     * 插入指令的数据
     *
     * @param array   $data 需要写入的数据
     */
    public function insert( $data ) {
        if ( !is_array( $data ) ) {
            return FALSE;
        }

        $sql = "INSERT INTO order ";
        $sql .= "(`" . implode( "`,`", array_keys( $data ) ) . "`)";
        $sql .= " VALUES('" . implode( "','", array_values( $data ) ) . "')";

        return DB::query( $sql );
    }

}

/**
 * 客户端调用
 */
class Client {
    public static function main() {
        $order = new OrderGateway();

        header( "Content-type:text/html; charset=utf-8" );
        $data = array( 'order' => 'start');
        $order->insert( $data );

        $id = 1;
        $data['id'] = $id;
        $order->update( $id, $data );

        $order->findAll();

        $order->findByName( 'start' );
    }
}

Client::main();

?>

 

 

三、运行机制

由事例可以看出表数据入口接口其实很简单,一般包括几个从数据库中获取数据的查找方法以及更新、插入和删除方法,每个方法都将输入参数映射为一个SQL调用并在数据库连接上执行该语句。

 

从事例查询数据接口可以看到,每个查询都会返回多个数据项,php是允许返回多数据项的,可以把这些项作为一个单行使用,但如果只能返回一个单值,多次查询才能返回多行。这种情况可以采用数据传输对象。

 

 

四、使用场景

 

4.1表模块

表数据入口产生一个记录集数据结构由表模块处理。表模块最好的数据映射就是表数据入口了。

 

4.2事务脚本

表数据入口特别适用于事务脚本。二者之间的选择归结于如何处理多数据行。对PHP而言这个不是什么问题,对于之前提到有些语言不允许返回多数据项的,可以采用数据传输对象,不过这显然比表数据入口麻烦。

 

4.3领域模型

通常这两者很少一起使用,可以用表数据入口返回适当的领域对象,问题是这样会使领域对象和入口这间存在双向依赖。相反,数据映射器更好地分离了领域模型和数据库。

 

3
2
分享到:
评论

相关推荐

    PHP数据源架构模式之表入口模式实例分析

    在本文中,我们将深入探讨PHP中的数据源架构模式,特别是表入口模式。数据源架构模式是设计应用程序时用于管理数据库交互的一种策略,它们旨在提高代码的可维护性和可重用性。表入口模式是这四种主要模式之一,它...

    用设计模式解决多数据源问题

    在多数据源场景下,可以创建一个单例的数据源管理器,用于维护和管理不同的数据库连接,确保在整个应用程序中只有一个统一的入口来访问数据源。 2. 工厂模式:当需要创建多个相似对象,但具体类型在运行时决定时,...

    Spring+SpringMVC+Mybatis动态链接多数据源

    本项目中的“RouterWeb”可能是一个Web应用程序的入口点或者路由处理类,用于根据请求信息选择合适的数据源。通过这个项目,你可以学习到如何在Spring、SpringMVC和Mybatis的环境下实现动态多数据源的配置和管理,这...

    Oracle数据仓库架构.ppt

    综上所述,Oracle数据仓库架构是一个复杂而全面的系统,涵盖了从数据源到用户接口的各个环节。它利用先进的数据库技术、ETL工具、商业智能组件和集群技术,为企业的数据管理和决策支持提供了强大支持。通过优化这些...

    数据仓库体系架构、主要过程与技术介绍

    1. 数据整合层:是整个系统中数据的统一入口,主要负责从异种数据源中提取数据,并进行清洗和转换处理,最终加载到ODS(操作性数据存储区)中。 2. 存储服务层:负责中央数据仓库的抽取、转化、加载(ETL)操作,以及...

    星环科技多模型数据库ArgoDB“一库多用“,构建高性能湖仓集一体平台

    在架构上,ArgoDB 基于存算解耦,实现了多模数据库的“四个统一”:统一的 SQL 编译引擎,支持 SQL 99/2003 标准语法,兼容 TD、Oracle、DB2 等多种方言,对不同模式的数据提供统一接口,将多个操作访问入口变为一个...

    数据中台技术架构设计方案.pptx

    数据中台根据企业的特定业务模式和组织架构,通过具体的产品和服务支撑体系,构建一套持续不断地将数据转化为资产并服务于业务的机制。具体而言: - **机制**:数据中台是一种持续让企业数据发挥作用的机制。 - **...

    数据中台架构及车联网行业应用.pptx

    数据中台建设的目的是打破传统的“数据烟囱”和“数据孤岛”,整合分散的系统和数据源,实现数据资产的高效利用。通过数据中台,企业可以实现数据的统一入口和出口,标准化管理,以及仓库化的数据存储。此外,它还...

    C#三层架构经典源代码

    在一个典型的三层架构应用程序中,应用程序的用户工作站包括提供图形用户界面(GUI)的程序设计和具体的应用程序入口表格或交互式窗口。 事务逻辑处在局域网(LAN)服务器或其他共享主机上,它作为...

    京东金融大数据分析平台总体架构-v10.pptx

    在数据产生层,平台整合了来自内部业务系统产生的结构化数据以及非结构化数据,同时也接入了外部以非结构化为主的各类数据源。这些数据的整合是构建大数据平台的基础,也是确保数据多维度、全面性的重要步骤。 数据...

    Linux电源管理系统架构和驱动

    - **频率/电压表(OPP模块)**:为各驱动子系统提供频率和电压数据支持。 #### 二、CPUFreq驱动详解 **CPUFreq子系统**位于`drivers/cpufreq`目录下,负责动态调整CPU的运行频率和电压,从而达到节能的目的。具体...

    用mfc做一个有数据源,有登陆界面的学生管理

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来开发一个具有数据源和登录界面的学生管理系统。MFC 是微软提供的一套面向对象的C++库,它简化了Windows应用程序的开发,提供了丰富的窗口、...

    基于SpringCloud框架核心组件,搭建多数据源管理,多服务管理,多中间件集成,多业务拆分设计的综合框架案例。.zip

    在本项目中,我们主要探讨的是如何利用SpringCloud框架构建一个综合性的微服务架构,它涵盖了多数据源管理、多服务治理、多种中间件集成以及多业务模块的拆分设计。SpringCloud作为Java领域的微服务解决方案,提供了...

    携程第四代架构探秘之运维基础架构升级.docx

    引入了Group概念,构建了App、Server、Pool、Group、Route的数据结构模型,通过CMS作为权威数据源,确保数据的完整性和准确性。同时,采用七层负载均衡(SLB)实现应用访问入口的隔离,支持应用级别的健康检测。最后...

    基于LINQtoSQL的WEB开发三层架构.pdf

    LINQ(Language Integrated Query)是.NET平台中的一种语言集成查询技术,它提供了一种统一的方式来查询不同的数据源,包括内存中的集合、数据库和XML文档等。LINQ to SQL作为LINQ技术的一个组成部分,主要负责对...

    WPF从主表样式于数据绑定

    `DataGrid`可以方便地与各种数据源进行数据绑定,包括但不限于ObservableCollection、List等。在`DataGridInDataGrid.xaml.cs`中,可能实现了嵌套的`DataGrid`,即在一个`DataGrid`中显示另一个`DataGrid`,用于展示...

    Android应用程序架构.rar

    Repository模式用于统一数据源管理,无论数据来自网络、本地数据库还是文件,都通过Repository接口进行操作。此外,Clean Architecture提倡层次化的结构,将业务逻辑与平台特定代码分离,提高代码的可重用性和可维护...

    vs2008_LINQ使用三层架构开发

    查询的结果是一个IQueryable集合,可以直接用作GridView的数据源。 运行页面后,GridView将显示Products表的所有记录。这一切的背后,是VS2008生成的LTS层将数据库操作转换为对象操作,而LINQ在编译时将这些对象...

Global site tag (gtag.js) - Google Analytics