`

业务逻辑层之表模块

阅读更多

在业务逻辑层中还有一种模式:表模块,在PHP的实际开发,很多时候其实用到的都是表模块模型。

 

一、概念

Table Module:处理某一数据库或视图中所有行的业务逻辑的一个实例。太抽象了!其实表模块和领域模型非常相似。表模块是以一个类对应数据库中的一个表来组织领域逻辑,而且使用单一的类实例来包含将对数据进行的各种操作程序,它与领域逻辑的主要区别在于,如果你有许多订单,领域模型对每一个订单都有一个对象,而表模块则只用一个对象来处理所有订单。

 

二、为什么要使用表模块?

表模块的优点是允许将数据与行为封装在一起,同时又可以充分利用关系数据库的优点,表面上看起来表模块与常规的对象很相似,但关键区别在于它本身没有标识符来标出它所代表的实体对象。因此其操作时都需要传入一个某种类型的标识符(例如主键)。

表模块在很大程序上依赖于表方式组织的数据,因此当你使用记录集存取表数据时应当使用这一模式。

如果领域模型中的对象与数据库中的表比较一致,可能采用基于活动记录的领域模型会更好一此。当应用程序的其他部分基于一个公用的面向表的数据结构时,表模块将比领域模型和活动记录的组合工作得更好。

 

三、简单实现表模块

<?php
//大多应用中会有一个基类,此处方便起见省略
class Order {
    private $conn;
    public function __construct() {
        $this->conn = '初始化连接,可注册表从中获取';
    }

    public function getAll() {
        return array();
    }

    public function getByConditions($conditions = array()){
        return array();
    }

    public function getOrderInfo($orderID){
        return array();
    }

    public function update( $orderID ) {
        return 0;
    }
    public function delete( $orderID ) {
        return 0;
    }
    public function insert( $orderID ) {
        return 0;
    }
}

 看完可能会说:这不是我天天在敲的代码么。确实,在实际的开发中,表模块在中小的项目中运用得比较多,编程的门槛也比较低。你可能不知道这种模式,但其实你一直在使用它。。。

 

四、小结

事务脚本比较容易理解,但系统越复杂它就越难以维护;领域模型非常规范,但要纯粹的实现它,需要面临的主要问题是对象和关系数据库之间的映射问题;表模块介于两者之间,很多开发平台对表模块和基于记录集的编程都有非常好的支持,因此,它往往是一个不错的折中选择。值得注意的是,表模块并没有给你提供完全的面向对象能力来组织复杂的领域逻辑,你不能在实例之间直接建立关联,而且多态机制也无法工作良好。

3
2
分享到:
评论
3 楼 home198979 2014-08-20  
xiaokek 写道
你讲的是《企业级应用架构模式》这本书里面的东西吗,个人感觉里面的东西有些过时了。而且中文翻译的比较生硬。

有参考此书,这是架构的基础,过时不至于吧。
2 楼 xiaokek 2014-08-19  
你讲的是《企业级应用架构模式》这本书里面的东西吗,个人感觉里面的东西有些过时了。而且中文翻译的比较生硬。
1 楼 fojut 2014-07-18  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>SyntaxHighlighter Demo Page - <?= htmlspecialchars($title) ?></title>
</head>

<body>

<?
/***********************************
** Multiline block comments
**********************************/

$stringWithUrl = "http://alexgorbatchev.com";
$stringWithOutUrl = 'hello world';

ob_start("parseOutputBuffer");      // Start Code Buffering
session_start();

function parseOutputBuffer($buf) {
    global $portal_small_code, $portal_gzcompress;
    global $PHP_SELF, $HTTP_ACCEPT_ENCODING;

    // cleaning out the code.
    if($portal_small_code && !$portal_gzcompress) {
        $buf = str_replace("    ", "", $buf);
        $buf = str_replace("\n", "", $buf);
        $buf = str_replace(chr(13), "", $buf);
    }
}

?>

<!-- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -->

</body>
</html>

相关推荐

Global site tag (gtag.js) - Google Analytics