这要回顾到10年前, 我入手了一本 Wrox 的 Professional PHP4.

这本书我印象深刻, 因为它一共有十一个作者在写: 当时看到它有一篇单元 “多层式架构开发” ,让我对整个 WEB 架构开发的视野完全打开.

不过我得承认我以前很嘴贱, 常说 SMARTY TEMPLATE 是玩具.

PS : SMARTY TEMPLATE 采用 tpl php var 的方式来做少了这一层,常会极端的用些言语说它不好.

你可以参考二本书, 会发现这一层放入这个设计会让你未来工作变的轻松很多.

#回到正题-

这一层专门用来处理 Content Logic Layer 处理好的资料, 利用 XML , JSON 等标准化的介面语言, 来规范你的 Content Logic Layer 按照你的 Convention (规范)来吐出资料给 Presentation Logic Layer

a.这样做有什麽好处:

1.一致性高:

也因为这样, 你的 Presentation Layer 有著标准化的格式, 所以你在使用 AJAX , AS , PHP SDK 等…做画面逻辑串接时,

你的画面逻辑的程序将会变的一致性很高, 因为都是参考同样的格式, 让你的画面逻辑的程序不会乱长.

工程师因为熟悉相同的介面格式, 工作起来将会非常的轻松.

2.可重覆利用性高:

在你享受 Presentation Layer 有著标准化的格式的好处时, 你会发现,你可以把画面逻辑也整理起来重覆利用,

这时你会发现你少写好多好多的程序码.

例如: 换页逻辑, 表单的呈现………..等等等, 只要另外塞 CSS 进来就好了. 根本不用写什麽程序.

3.跨平台性高:

啥咪?还有.是的!!!大家记得 RSS 吗? RSS就是利用了 Presentation Layer 这个特性让各种平台都可以串接 BLOG 的文章内容, 让你的系统有著强大的夸平台性整合能力.

4.云端应用:

是的即然跨平台性高了, 也就是你完成这个需求的同时, 你所有的系统内容的呈现可以丢给任何云端平台的整合!

b.使用心得:

这个设计, 会让你的系统架构非常灵活, 灵活到什麽程度?

以往一组新增/修改/删除/换页/搜寻, 只要写完一次而且完整的从下到上每一层整合上来.

我几乎不用二次开发, 直接套用之前写好的 content Logic , Presentation Logic 就可以完成一个需求.

一天可以完工三十几组新增/修改/删除/换页/搜寻的串接, 所以我当时消耗需求的速度比起一般没有用这个设计技巧快上非常的多.

而大家心裡会有疑问, 这不就是以前 RUBY & CAKE PHP 的特性吗?是的!!就这个理念!

不过有差异, 就是 CAKE PHP 在做画面逻辑时, 它并不会真的把这层切开, 而是将 MVC 裡的 V 和 C 有效化的重覆利用, 但是一但要使用云端应用和夸平台时,

之前写过的程序无法直接透过 Presentation Layer 拉出去给第三方平台做串接.

虽然省了 ORM 那一层的重覆开发, 但是 Content Layer 和 Presentation Layer 还是要在手工调整的.

而一但一调整, 就会产生, DEBUG ,开发, 稳定性, 和你又多了一堆CODE 要维护的工作….

4. 表现逻辑层 :

这一层讲起来轻松多了, 因为大家己经有了非常多的 AJAX , XSL , FACEBOOK SDK , IOS , ANDROID , FLASH AS 的串接经验.

没错, 这裡就是把之前辛苦定义并且做好的 Presentation Layer 吐出来的格式做应用.

你可以透过~HTTP , SOCKET SERVER 等等..将你的 Presentation Layer 的 JSON , XML 吐出来, 并且交给你的画面逻辑程序去串接.

这麽一来你也轻松完成了一个云端的整合介面, 让你写的 PHP 可以广泛的使用在任何不同的平台上.

5. 单元测试/压力测试/集成测试:

在我开发每一层的元件时, 我都会要求工程师, 做单元测试(UNIT TEST), 压力测试( Stress Test ), 整合测试( Integration Test )

a.单元测试(UNIT TEST): 你可以使用 PHPUNIT 或是自己写, 针对你的一个函数的进和出的测试, 并且预先写好 TEST CASE ,确保每一层的函式库都是非常稳定而且没有问题的, 来让你管理程序的品质.

b.压力测试(Stess TEST): 针对每一个函式库的逻辑, 在做 UNIT TEST 的同时, 将 STRESS TEST 的 TEST CASE 喂进去, 并且记录每一个函式处理 TEST 所消耗的时间.

c.整合测试(Integration Test): 你可以写一支程序, 做 DAILY BUILD 每天去检查所有程序设计师 COMMIT 到 SVN 的程序码是否有问题, 确保每个函式之间整合是正常的, 降低 DEBUG 的工作量.