- 浏览: 1340742 次
- 性别:
- 来自: 深圳
最新评论
-
chinaxy1:
...
ON DUPLICATE KEY UPDATE重复插入时更新 -
b_l_east:
不一定哦,就算大小相当,in 和 exists的性能也会很大差 ...
mysql查询语句in和exists二者的区别和性能影响 -
llp1990311:
[size=x-small][/size]
如何正确防御xss攻击 -
home198979:
q315506754 写道还是佩服写c的 用其它语言一样可以实 ...
玩转深度优先搜索算法 -
q315506754:
还是佩服写c的
玩转深度优先搜索算法
文章列表
形象化设计模式实战 HELLO!架构
一、概念
Lazy Load:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。
延迟加载貌似很简单,就是在数据需要时再从数据库获取,减少数据库的消耗。但这其中还是有不少技巧的。
二、实现延迟加载
实现Lazy Load主要有四种方法:延迟初始化、虚代理、值保持器和重影。
(1)延迟初始化(Lazy initialization)
1.1 概念
这个是最简单的方法。意思就是每次访问属性域都要先检查该域是否为空,如果为空,再获取这个域的值。这样必须做到所有对该域的访问,即使来自类的内部,都 ...
一、概念
Unit of Work:维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。其UML结构大致如下:
工作单元记录在业务事务过程中对数据库有影响的所有变化。操作结束后,作为一种结果,工作单元了解所有需要对数据库做的改变,统一对数据库操作。
二、为什么要使用工作单元?
如果没有使用工作单元,可以在每次修改对象模型时对数据库对得相应修改,但这样会产生大量规模很小的数据库调用,从而导致速度变慢。而且这样做还需要有一个对整个交互过程都开放的事务,如果存在一个贯穿多个请求的业务事务,这就是不合实际的。如果还要记录读过的对象以避免不致读,那么情况会更糟。
引发处 ...
HELLO!架构
一、概念
identity Map:通过在映射中保存每个已经加载的对象,确保每个对象只加载一次,当要访问对象的时候,通过映射来查找它们。其实在数据源架构模式之数据映射器代码中有提及到标识映射,Mapper类的getFromMap方法就是实现标识映射的实现。
二、为什么要使用标识映射?
在数据源架构模式之数据映射器中
//client代码
$venue = new venue();
$venue->setName("XXXXXXX");
//插入一条数据
$mapper = new Venue ...
前面分别介绍了数据源架构模式之表数据入口、数据源架构模式之行和数据入口数据源架构模式之活动记录,相较于这三种数据源架构模式,数据映射器显得更加“高大上”。
一、概念
数据映射器(Data Mapper):在保持对 ...
hello!架构
一、概念
活动记录(Active Record):一个对象,它包装数据库表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。
对象既有数据又有行为。活动记录使用直截了当的方法,把数据访问逻辑置于领域对象中。
二、实现简单活动记录
活动记录在php许多框架中都有应用,如cakephp。
<?php
/**
* 行数据入口类
*/
class OrderGateway {
/*定义元数据映射*/
private $_name;
private $_id;
public function ...
注:看不懂的请勿踩,此文章非针对java,java爱好者可直接略过。
一、概念
行数据入口(Row Data Gateway):充当数据源中单条记录入口的对象,每行一个实例。
二、简单实现行数据入口
为了方便理解,还是先简单实现:
<?php
/**
* 行数据入口类
*/
class OrderGateway {
/*定义元数据映射*/
private $_name;
private $_id;
public function __construct($id, $name) {
$thi ...
数据源架构模式有四种:表数据之口,行数据入口,活动记录和数据映射器。
在了解它们之前,需对领域模型模式有一定的了解,可先参看
业务逻辑层之事务脚本与领域模型和业务逻辑层之表模块
一、概念
表数据入口(Table Data Gateway):充当数据库表访问入口的对象。一个实例处理表中所有的行(有没有想起表模块)。
表数据入口包含了用于访问单个表或视图的所有SQL,如CRUD等,其他代码调用它的方法来实现所有与数据库的交互。
二、实现简单的表数据入口
为方便理解,先给出事例,后面根据事例再作详细的分析。
<?php
class DB {
/**
...
在业务逻辑层中还有一种模式:表模块,在PHP的实际开发,很多时候其实用到的都是表模块模型。
一、概念
Table Module:处理某一数据库或视图中所有行的业务逻辑的一个实例。太抽象了!其实表模块和领域模型非常相似。表模块是以一个类对应数据库中的一个表来组织领域逻辑,而且使用单一的类实例来包含将对数据进行的各种操作程序,它与领域逻辑的主要区别在于,如果你有许多订单,领域模型对每一个订单都有一个对象,而表模块则只用一个对象来处理所有订单。
二、为什么要使用表模块?
表模块的优点是允许将数据与行为封装在一起,同时又可以充分利用关系数据库的优点,表面上看起来表模块与常规的对象很 ...
在前面的博客中,已了解了前端控制器,页面控制器,应用控制器这三种表现层模式,如果说它们精心安排了外部世界与系统内部的通信,那么业务逻辑层的工作则是处理应用程序的业务部分。业务逻辑层应当远离那些外部的“ ...
在前端控制器博客中说到前端控制器比较复杂,不适用于相对的小项目,那如何以最佳方式为适度复杂的WEB应用程序构建控制器,从而既能避免代码重复,又能实现重用性和灵活性?
一、概念
Page Controller很简单,就是接 ...
在前端控制器中说到执行命令时,是用命令对象自己调用视图,如果系统的规模较小,可以如此。但这并不是最佳的选择,最好是尽可能地将命令和视图分离开来。
一、概念
应用控制器负责映射请求到命令,并映射命令到 ...
一、概念
前端控制器模式用一个中心来处理所有到来的请求,最后调用视图将结果呈现给用户。此模式是Java企业应用的核心模式之一,但在PHP中并没有受到广泛的喜爱,部分原因是初始化前端控制器所需要的开销会导致系统 ...
啥是注册表模式?其实很简单!
注册表的作用是提供系统级别的对象访问功能。我们在编码时通常把“全局变量是不好的”当做信条。不过,凡事都有两面性,全局性的数据访问非常具有吸引力。
问题来了:
大多系统都分为几个层,每个层都只通过事先定义好的通道和相邻的层交流。对层的分享使程序变得灵活,替换或修改每个层可以最小化对系统其他部分的影响。但当你需要在一个层中获取不相邻另一个层所需要的信息时,该如何?
方案一:通过系统的层之间的联系将上下文信息从一个对象传递给另一个需要的对象:在系统中把这些信息从一个对象传递到另一个对象,从一个负责处理请求的控制器对象传递到业务逻辑层的对象,再传递到负 ...
创建类模式描述如何创建对象,行为类模式关注如何管理对象的行为,结构类模式则看重于如何建立一个软件结构,虽然三种模式的着重点不同,但是在实际应用中还是有重叠的,会出现一种模式适用,另外一种模式也适用的情况。
一、策略模式VS桥梁模式
策略模式是一个行为模式,旨在封装一系列的行为,封装的格式(算法)不同,行为也就不同;而桥梁模式则是解决在不破坏封装的情况下如何抽取出它的抽象部分和实现部分,它的前提是不破坏封装,让抽象部分和实现部分都可以独立地变化。桥梁模式必然有两个“桥墩”——抽象化角色和实现化角色,只要桥墩搭建好,桥就有了,而策略模式只有一个抽象角色,可以没有实现,也可以很多实现。
...
行为类模式包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法、访问者模式,我去,好多。。。下面主要挑选几个比较容易混淆且比较重要的模式进 ...