自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP系統(tǒng)設(shè)計(jì)與云架構(gòu)

開(kāi)發(fā) 后端 架構(gòu)
這幾年我比較少寫(xiě) PHP 了。有陣子很迷它, 但是因?yàn)楣ぷ麝P(guān)系, 把較多的時(shí)間花在網(wǎng)絡(luò)封包和數(shù)據(jù)庫(kù)的分析工作上。而且因?yàn)槟暧涊^大了所以也很難找到寫(xiě)程序的工作多半都在做工程師的 “工頭”。

這幾年我比較少寫(xiě) PHP 了.

有陣子很迷它, 但是因?yàn)楣ぷ麝P(guān)系, 把較多的時(shí)間花在網(wǎng)絡(luò)封包和數(shù)據(jù)庫(kù)的分析工作上.

而且因?yàn)槟暧涊^大了所以也很難找到寫(xiě)程序的工作多半都在做工程師的 “工頭”

對(duì)于這幾年 PHP 的變化我來(lái)不及參與.

在這裡收集這幾年對(duì) PHP 的變化, 寫(xiě)篇心得過(guò)過(guò)本人自己的乾隱:

回顧您以往的職業(yè)生涯, 您有好好的管理您寫(xiě)的 CODE 嗎?

還是每次都寫(xiě)到需求超級(jí)肥大了, 才延伸出一大堆的程序碼管理問(wèn)題.

在這裡本人設(shè)計(jì)一個(gè)開(kāi)發(fā)框架的架構(gòu), 讓你的程序更簡(jiǎn)潔而且讓你的程序更有條有理的被應(yīng)用.

當(dāng)然這些架構(gòu)教程我己經(jīng)簡(jiǎn)化很多, 如果放入太多的設(shè)計(jì)反而會(huì)得到反效果.

如果您是比較重口味的 PHP 設(shè)計(jì)者, 先說(shuō)聲報(bào)歉了.

如果您常為了需求肥大難以管理你的程序,

這篇文章對(duì)您來(lái)說(shuō)會(huì)是個(gè)值得參考的文章, 至少它有著我十幾年的需求開(kāi)發(fā)經(jīng)驗(yàn).

一.常見(jiàn)的 PHP 應(yīng)用的架構(gòu):

在往下教程下去前, 本人先定義一些名詞, 以方便大家接下去閱讀教程.

  • DB :
    這一塊不用多介紹, 我相信大家對(duì) DB 的經(jīng)驗(yàn)獨(dú)道, 我們直接跳過(guò)去.
  • Access Layer :
    這一塊全部都是放一些 Access Logic 在裡頭, 主要的工作是負(fù)責(zé)跟 DB 還有 MEMCACHE 溝通, 你可以使用現(xiàn)成的開(kāi)發(fā)框架達(dá)成這一層的目地, 也可以自己開(kāi)發(fā).但是這些邏輯建議您都保留在這一層.

  • MEMCACHE :
    這一塊主要是做為分散式架構(gòu)的存取層, 大家有沒(méi)有注意到一件事?它是走 TCP 11211 PORT .

它可以用在什麼地方?

a.讓你可以把從 DB 的資料撈到快取一份到 MEMCACHE ,來(lái)減輕資料庫(kù)的工作負(fù)擔(dān), 這在大型而且流量很高的系統(tǒng)上, 它辨演很重要的角色就是可以減輕 DB 的工作量.
*我們這裡不多介紹 Memcahe 的使用及方式, 您可以多參考官方網(wǎng)站或其它網(wǎng)絡(luò)上的教程.

b.有一些不用儲(chǔ)存用完就不要的資料, 也可以利用 memcache 直接存取不用再交給 DB 去處理.

c.注意一件事:
在過(guò)去裡我的下屬們?cè)谑褂盟鼤r(shí)常會(huì)犯一個(gè)錯(cuò)就是爛用 Memcache ,

memcache 本身是一個(gè) TCP 的服務(wù)在單臺(tái) linux 伺服器下最多只能使用1024個(gè)請(qǐng)求, 當(dāng)然你可以用 ulimit 提高它, 但是請(qǐng)先了解它的本質(zhì)用對(duì)地方.

它本身并不能做為程序本身加快程序效能的工具, 但是它是一個(gè)可以做到分散式的存取架構(gòu), 并且可以減輕 DB 負(fù)擔(dān)的工具, 的好用工具.

所以在使用它時(shí)要選對(duì)時(shí)機(jī), 千萬(wàn)不要爛用.

  • Access Layer :這一層的工作主要是存取資料層的邏輯, 我將會(huì)2.會(huì)有更詳細(xì)的說(shuō)明.
  • Content Logic Layer :這一層的工作主要是負(fù)責(zé)處理存取層從 資料層要來(lái)的資料的邏輯, 我將會(huì)3.會(huì)有更詳細(xì)的說(shuō)明.
  • Presentation Layer :這一層的工作意義重大, 它主要是標(biāo)準(zhǔn)化 Presentation Logic 與 Content Logic Layer 溝通的標(biāo)準(zhǔn),讓你的畫(huà)面邏輯不會(huì)愈來(lái)愈肥大及復(fù)雜, 我將會(huì)4.會(huì)有更詳細(xì)的說(shuō)明.
  • Presentation Logic Layer :這一層的工作是做為讓 你的畫(huà)面邏輯可以采用標(biāo)準(zhǔn)化的介面來(lái)與伺服器溝通, 如果 Presentation Layer 標(biāo)準(zhǔn)化了, 你的畫(huà)面邏輯的可重覆利用性就會(huì)更高及有彈性, 我將會(huì)5.會(huì)有更詳細(xì)的說(shuō)明.
  • Client Layer :這一層就是我們平時(shí)便用的瀏覽器,云端服務(wù)等等的應(yīng)用, 相信大家非常了解這一層可以做到的事, 所以我們就不多介紹 Client Layer 了.

#p#

二.功能方塊介紹:

到這裡我們必需要將圖裡的方塊切的更細(xì)讓大家理解請(qǐng)耐心的看完下一張圖:

1. 數(shù)據(jù)庫(kù)邏輯層 :

Access Logic Layer 主要的工作是做為與 DB 和 Content Logic 溝通的區(qū)塊, 在這裡本人建議大家在設(shè)計(jì)物件庫(kù)或函式庫(kù)前, 先參考這個(gè)架構(gòu).

把所有跟資料庫(kù)存取的邏輯全部包裝在這個(gè)區(qū)塊下, 例如大家在設(shè)計(jì)DB時(shí)***用 Factory 來(lái)做 DB 的切換, 同時(shí)把這些邏輯全部整到這一層讓您的程序更有層次更好管理.

看到這裡大家一定對(duì)一些使用 Factory 設(shè)計(jì)的 OOP DB 存取函式庫(kù)不漠生.

這時(shí)我要介紹大家一個(gè)名詞, Object-relational_mapping :

http://en.wikipedia.org/wiki/Object-relational_mapping

什麼地方有 ORM ?就是大家常用的.

CAKE PHP
ZEND FRAMEWORK.
Doctrine
Propel
CoughPHP
Symphony

當(dāng)然…您也可以自己寫(xiě), 重點(diǎn)是, 要懂得怎麼有效率的去管理你的存取層的邏輯.

而一但定義了這一層.

強(qiáng)烈建議在接下來(lái)的 Content Logic Layer , Presentation Logic Layer 嚴(yán)格禁止其它邏輯層的邏輯跳過(guò)它來(lái)存取資料庫(kù).

這麼做有什麼好處? :
1.確保其它工作者不會(huì)寫(xiě)出不良的DB存取邏輯造成你的系統(tǒng)不好維護(hù)
2.你可以不用再擔(dān)心會(huì)有嚴(yán)重的存取層 BUG
3.它在使用上變的更安全, 不會(huì)讓你的資料庫(kù)暴露在 Content & Presentation Logic Layer ,讓你的 DB 有一定程度的保障.
4.如果你的 ORM TOOL 有提供管理器, 你還可以把所有的 SQL 語(yǔ)法倒出來(lái)檢示有沒(méi)有什麼存取過(guò)重的語(yǔ)法.
5.最重要的!!你可以把常用的存取層資料跟 MEMCACHE 做有效的資源管理, 讓你的 DB 的資源更有效的被利用!!

補(bǔ)充說(shuō)明:

  • Access MYSQL :資料庫(kù)的新增改查邏輯全部放在這.
  • Access Memcache :與 MEMCACHE 存取的新增改查邏輯全部放在這.
  • Access NOSQL :現(xiàn)在***的 NOSQL ,你可以分別的去包裝你要的邏輯在這裡面.
  • Other :如果你有別的使用資料存取的邏輯, 可以參造上述的方式一一的去整理….

2. 邏輯層 :

這一層有什麼東西?

1.你們服務(wù)用的到的商業(yè)邏輯, 你可以把每個(gè)商業(yè)邏輯用 OOP 設(shè)計(jì), 并且放在這一塊, 以利日后的管理.

2. String Parser :

為什麼在這篇教程裡我會(huì)建議您設(shè)計(jì)這塊? 因?yàn)樗匦铦M足 Presentation Layer 要求的幾個(gè)素求:

1.一致性高,2.可重覆利用性高, 3.跨平臺(tái)性高,4.云端應(yīng)用, 所以大家不要關(guān)掉文章快點(diǎn)看到3.怎麼讓你的系統(tǒng)可以符合這四個(gè)素求.

3.表示層:

我為何在這篇教程裡, 放入了這一層的應(yīng)用?

這要回顧到10年前, 我入手了一本 Wrox 的 Professional PHP4.
這本書(shū)我印象深刻, 因?yàn)樗还灿惺粋€(gè)作者在寫(xiě): 當(dāng)時(shí)看到它有一篇單元 “多層式架構(gòu)開(kāi)發(fā)” ,讓我對(duì)整個(gè) WEB 架構(gòu)開(kāi)發(fā)的視野完全打開(kāi).
不過(guò)我得承認(rèn)我以前很嘴賤, 常說(shuō) SMARTY TEMPLATE 是玩具.

PS : SMARTY TEMPLATE 采用 tpl php var 的方式來(lái)做少了這一層,常會(huì)極端的用些言語(yǔ)說(shuō)它不好.

你可以參考這二本書(shū), 會(huì)發(fā)現(xiàn)這一層放入這個(gè)設(shè)計(jì)會(huì)讓你未來(lái)工作變的輕松很多.
http://www.amazon.com/Profession … homas/dp/1861006918
http://www.amazon.com/Profession … p;keywords=PHP4+XML

#回到正題-

這一層專門(mén)用來(lái)處理 Content Logic Layer 處理好的資料, 利用 XML , JSON 等標(biāo)準(zhǔn)化的介面語(yǔ)言, 來(lái)規(guī)范你的 Content Logic Layer 按照你的 Convention (規(guī)范)來(lái)吐出資料給 Presentation Logic Layer

a.這樣做有什麼好處:

1.一致性高:

也因?yàn)檫@樣, 你的 Presentation Layer 有著標(biāo)準(zhǔn)化的格式, 所以你在使用 AJAX , AS , PHP SDK 等…做畫(huà)面邏輯串接時(shí),
你的畫(huà)面邏輯的程序?qū)?huì)變的一致性很高, 因?yàn)槎际菂⒖纪瑯拥母袷? 讓你的畫(huà)面邏輯的程序不會(huì)亂長(zhǎng).
工程師因?yàn)槭煜は嗤慕槊娓袷? 工作起來(lái)將會(huì)非常的輕松.

2.可重覆利用性高:

在你享受 Presentation Layer 有著標(biāo)準(zhǔn)化的格式的好處時(shí), 你會(huì)發(fā)現(xiàn),你可以把畫(huà)面邏輯也整理起來(lái)重覆利用,
這時(shí)你會(huì)發(fā)現(xiàn)你少寫(xiě)好多好多的程序碼.

例如: 換頁(yè)邏輯, 表單的呈現(xiàn)………..等等等, 只要另外塞 CSS 進(jìn)來(lái)就好了. 根本不用寫(xiě)什麼程序.

3.跨平臺(tái)性高:

啥咪?還有.是的!!!大家記得 RSS 嗎? RSS就是利用了 Presentation Layer 這個(gè)特性讓各種平臺(tái)都可以串接 BLOG 的文章內(nèi)容, 讓你的系統(tǒng)有著強(qiáng)大的夸平臺(tái)性整合能力.

4.云端應(yīng)用:

是的即然跨平臺(tái)性高了, 也就是你完成這個(gè)需求的同時(shí), 你所有的系統(tǒng)內(nèi)容的呈現(xiàn)可以丟給任何云端平臺(tái)的整合!

b.使用心得:

這個(gè)設(shè)計(jì), 會(huì)讓你的系統(tǒng)架構(gòu)非常靈活, 靈活到什麼程度?

以往一組新增/修改/刪除/換頁(yè)/搜尋, 只要寫(xiě)完一次而且完整的從下到上每一層整合上來(lái).

我?guī)缀醪挥枚伍_(kāi)發(fā), 直接套用之前寫(xiě)好的 content Logic , Presentation Logic 就可以完成一個(gè)需求.

一天可以完工三十幾組新增/修改/刪除/換頁(yè)/搜尋的串接, 所以我當(dāng)時(shí)消耗需求的速度比起一般沒(méi)有用這個(gè)設(shè)計(jì)技巧快上非常的多.

而大家心裡會(huì)有疑問(wèn), 這不就是以前 RUBY & CAKE PHP 的特性嗎?是的!!就這個(gè)理念!

不過(guò)有差異, 就是 CAKE PHP 在做畫(huà)面邏輯時(shí), 它并不會(huì)真的把這層切開(kāi), 而是將 MVC 裡的 V 和 C 有效化的重覆利用, 但是一但要使用云端應(yīng)用和夸平臺(tái)時(shí),

之前寫(xiě)過(guò)的程序無(wú)法直接透過(guò) Presentation Layer 拉出去給第三方平臺(tái)做串接.

雖然省了 ORM 那一層的重覆開(kāi)發(fā), 但是 Content Layer 和 Presentation Layer 還是要在手工調(diào)整的.

而一但一調(diào)整, 就會(huì)產(chǎn)生, DEBUG ,開(kāi)發(fā), 穩(wěn)定性, 和你又多了一堆CODE 要維護(hù)的工作….

4. 表現(xiàn)邏輯層 :

這一層講起來(lái)輕松多了, 因?yàn)榇蠹壹航?jīng)有了非常多的 AJAX , XSL , FACEBOOK SDK , IOS , ANDROID , FLASH AS 的串接經(jīng)驗(yàn).

沒(méi)錯(cuò), 這裡就是把之前辛苦定義并且做好的 Presentation Layer 吐出來(lái)的格式做應(yīng)用.

你可以透過(guò)~HTTP , SOCKET SERVER 等等..將你的 Presentation Layer 的 JSON , XML 吐出來(lái), 并且交給你的畫(huà)面邏輯程序去串接.

這麼一來(lái)你也輕松完成了一個(gè)云端的整合介面, 讓你寫(xiě)的 PHP 可以廣泛的使用在任何不同的平臺(tái)上.

5. 單元測(cè)試/壓力測(cè)試/集成測(cè)試:

在我開(kāi)發(fā)每一層的元件時(shí), 我都會(huì)要求工程師, 做單元測(cè)試(UNIT TEST), 壓力測(cè)試( Stress Test ), 整合測(cè)試( Integration Test )
a.單元測(cè)試(UNIT TEST): 你可以使用 PHPUNIT 或是自己寫(xiě), 針對(duì)你的一個(gè)函數(shù)的進(jìn)和出的測(cè)試, 并且預(yù)先寫(xiě)好 TEST CASE ,確保每一層的函式庫(kù)都是非常穩(wěn)定而且沒(méi)有問(wèn)題的, 來(lái)讓你管理程序的品質(zhì).

b.壓力測(cè)試(Stess TEST): 針對(duì)每一個(gè)函式庫(kù)的邏輯, 在做 UNIT TEST 的同時(shí), 將 STRESS TEST 的 TEST CASE 喂進(jìn)去, 并且記錄每一個(gè)函式處理 TEST 所消耗的時(shí)間.

c.整合測(cè)試(Integration Test): 你可以寫(xiě)一支程序, 做 DAILY BUILD 每天去檢查所有程序設(shè)計(jì)師 COMMIT 到 SVN 的程序碼是否有問(wèn)題, 確保每個(gè)函式之間整合是正常的, 降低 DEBUG 的工作量.

 

 

責(zé)任編輯:張偉 來(lái)源: 程序師
相關(guān)推薦

2023-10-27 11:35:18

存儲(chǔ)架構(gòu)版本庫(kù)

2017-04-16 00:26:34

融云直播互動(dòng)系統(tǒng)

2023-07-06 00:41:03

SQLNoSQL數(shù)據(jù)庫(kù)

2018-04-23 12:41:21

云計(jì)算政務(wù)云平臺(tái)架構(gòu)

2021-07-07 17:26:20

云原生云原生架構(gòu)阿里云

2025-01-13 00:24:49

2015-05-28 10:58:57

分布式彈性計(jì)算云計(jì)算架構(gòu)

2023-03-09 09:31:58

架構(gòu)設(shè)計(jì)vivo

2011-10-26 09:43:13

系統(tǒng)架構(gòu)師

2017-10-12 08:59:27

企業(yè)云存儲(chǔ)架構(gòu)

2011-10-25 08:59:28

系統(tǒng)架構(gòu)師

2010-04-01 15:16:08

云計(jì)算

2023-07-05 08:00:52

MetrAuto系統(tǒng)架構(gòu)

2016-08-16 00:18:45

運(yùn)營(yíng)商IT系統(tǒng)私有云架構(gòu)

2015-05-27 10:01:24

云計(jì)算云存儲(chǔ)架構(gòu)

2017-02-14 11:06:42

云存儲(chǔ)公共云私有云

2024-02-27 07:27:58

云原生推薦系統(tǒng)架構(gòu)云原生技術(shù)棧

2009-07-22 14:53:45

ibmdwIT架構(gòu)

2017-09-27 23:14:29

OPENSTACKDRaaS

2023-01-12 15:32:46

云原生Loggie
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)