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

宅男程序員給老婆的計(jì)算機(jī)課程之8:控制器

原創(chuàng)
開(kāi)發(fā)
這個(gè)系列來(lái)自一位宅男程序員,這個(gè)系列是他寫(xiě)給老婆的電腦課程。以下,開(kāi)始本系列的第8篇——控制器。如果程序員有良好的開(kāi)發(fā)風(fēng)格,基本是使用最基礎(chǔ)的php page controller,也可以達(dá)到類似的效果。

設(shè)計(jì)模式再“高級(jí)”一點(diǎn),便是所謂的“框架”了。

從事Web開(kāi)發(fā),一般都會(huì)接觸到MVC框架這個(gè)概念。

M:也就是Model,直接跟網(wǎng)站數(shù)據(jù)庫(kù)相關(guān)。

V:也就是View,是網(wǎng)頁(yè)的模版,跟顯示數(shù)據(jù)相關(guān)。

C:則是Controller,相當(dāng)于網(wǎng)站的業(yè)務(wù)邏輯。

MVC也不僅僅是應(yīng)用于網(wǎng)站開(kāi)發(fā),它的概念實(shí)際上植根于桌面軟件,并且在手機(jī)軟件開(kāi)發(fā)上也有應(yīng)用。

MVC本身是一個(gè)設(shè)計(jì)模式,是一個(gè)被驗(yàn)證過(guò)的,可以用來(lái)很好歸納、管理代碼的軟件開(kāi)發(fā)方式。

基于這樣的設(shè)計(jì)模式,提供了很多相關(guān)的類庫(kù)實(shí)現(xiàn),則“設(shè)計(jì)模式”升級(jí)為“框架”。

MVC的任何一個(gè)方面,擴(kuò)展出去講,都可以講上幾天幾夜。

今天只講C。

傳統(tǒng)上,php / asp / asp.net web form等,使用的是所謂的 Page Controller Patterns:http://martinfowler.com/eaaCatalog/pageController.html

Page Controller簡(jiǎn)單的說(shuō),便是一個(gè)網(wǎng)址對(duì)應(yīng)一個(gè)程序文件。

所以,我們會(huì)看到大量類似: show.php / show.asp / show.aspx 的網(wǎng)址存在,這樣的網(wǎng)址,背后都有相應(yīng)同名的文件。

這樣的模式,是網(wǎng)站從靜態(tài)轉(zhuǎn)向動(dòng)態(tài)是最自然的改變方便,也最為容易讓初學(xué)者接受。

但隨著網(wǎng)站的復(fù)雜化,這樣的模式會(huì)慢慢顯得不夠方便;比方說(shuō),多個(gè)不同的網(wǎng)址,映射到相同的處理;比方說(shuō),處理的時(shí)候,復(fù)用共同的資源。

頁(yè)面內(nèi)容的動(dòng)態(tài)化,同一個(gè)程序文件,顯示的內(nèi)容是動(dòng)態(tài)生成的 - 根據(jù)不同的query string,生成不同的內(nèi)容,如:show.php?id=1234

網(wǎng)頁(yè)程序內(nèi)部,實(shí)際上是需要解析網(wǎng)址中的query string,并做不同的操作。

這實(shí)際上是一個(gè)映射的過(guò)程,將網(wǎng)址映射到相應(yīng)的處理。

為了方便做這樣的映射,慢慢的出現(xiàn)了所謂的 Front Controller Patterns:
  http://martinfowler.com/eaaCatalog/frontController.html

這是通過(guò)某種機(jī)制,將符合各種規(guī)則的網(wǎng)址請(qǐng)求映射到程序中的一個(gè)類,或者是一個(gè)函數(shù)處理。

一般上,是使用正則表達(dá)式解析網(wǎng)址,并映射。

將網(wǎng)址映射到一個(gè)類;

  1. urls = ("/home""hello")  
  2. app = web.application(urls, globals())  
  3.  
  4. class hello:  
  5.   def GET(self):  
  6.     return 'Hello, world!' 

將網(wǎng)址請(qǐng)求映射到類,是相對(duì)較“重”的處理方式,比方說(shuō),需要處理類的初始化等等。

有的框架,也可以是一個(gè)函數(shù),則相對(duì)“輕量”一些:

  1. (r'^$''home'),  
  2.  
  3. def home(request):  
  4.   return HttpResponse("Hello, world."

類、函數(shù),均各有優(yōu)劣,但實(shí)際差異很小:

 映射到類的方式,往往還會(huì)根據(jù)不同的HTTP header映射到類里面中相映的函數(shù),比方說(shuō),將對(duì) /home 的HTTP GET請(qǐng)求映射給 hello 類的 GET 函數(shù);而對(duì) /home 的 HTTP POST請(qǐng)求映射給 hello 類的POST函數(shù)。

這部分 url routing的設(shè)計(jì)與實(shí)現(xiàn),各種語(yǔ)言、平臺(tái)上的功能均向正則表達(dá)式靠攏,大同小異。

有的可能專門(mén)為 restful 做了優(yōu)化,但即便木有,自行實(shí)現(xiàn)也并不復(fù)雜。

很多請(qǐng)求,都會(huì)有一些常用的默認(rèn)處理,比方說(shuō),檢查用戶是否登陸,檢查用戶是否有權(quán)限等等。

這些業(yè)務(wù)控制邏輯,是完全可以復(fù)用的。

在Page Controller的場(chǎng)景下,一般是通過(guò)繼承來(lái)實(shí)現(xiàn);而Front Controller場(chǎng)景下,而一般通過(guò)函數(shù)修飾符的風(fēng)格實(shí)現(xiàn),如:

  1. class UploadImgHandler(BaseHandler):  
  2.  @tornado.web.authenticated  
  3.  def post(self):  
  4.   XXX 

(上述代碼,實(shí)際上既使用了繼承,也使用了修飾符。)

Controller的改進(jìn),目的在于更加方便的維護(hù)代碼、修改業(yè)務(wù)邏輯。

如果程序員有良好的開(kāi)發(fā)風(fēng)格,基本是使用最基礎(chǔ)的php page controller,也可以達(dá)到類似的效果。

各種“先進(jìn)框架”,實(shí)際上是將常用的模式抽象出來(lái),并通過(guò)便利的約定方式向程序員開(kāi)放;如果程序員缺乏維護(hù)代碼的意識(shí),也很可能將良好的約定習(xí)慣用濫。

需要了解的,是為什么各框架的controller設(shè)計(jì)會(huì)有這樣的設(shè)計(jì),并用好;而不是死板的遵循“開(kāi)發(fā)指南”。

在簡(jiǎn)單業(yè)務(wù)場(chǎng)景下,實(shí)際上page controller會(huì)更加方便。

有這么一個(gè)“定理”:概念越簡(jiǎn)單的模式,在處理簡(jiǎn)單場(chǎng)景時(shí),是越便利;但隨著場(chǎng)景復(fù)雜化,簡(jiǎn)單的模式會(huì)越來(lái)越難以維護(hù)。

而概念相對(duì)復(fù)雜、高級(jí)的模式,處理簡(jiǎn)單場(chǎng)景時(shí),會(huì)相對(duì)麻煩;但隨著場(chǎng)景復(fù)雜化,則比簡(jiǎn)單的模式容易維護(hù)。

“復(fù)雜度是守恒”的:
  模式簡(jiǎn)單,維護(hù)則復(fù)雜。
  模式復(fù)雜,維護(hù)則簡(jiǎn)單。

一個(gè)復(fù)雜的地方變簡(jiǎn)單了,則另一個(gè)地方會(huì)變復(fù)雜;保持代碼結(jié)構(gòu)的清晰,不要自己給自己添麻煩。

什么叫自己給自己添麻煩?

普通復(fù)數(shù)形式,加s: pigs / cats / dogs

已經(jīng)可以很好了,但偏生有人要增加不規(guī)則復(fù)數(shù):

 sheep / mice / wives

這種就是自己給自己添麻煩。

作業(yè)

1. 說(shuō)說(shuō)對(duì) restful 的理解

2. 什么是 reverse proxy ?

51CTO系列:

  1. 宅男程序員給老婆的計(jì)算機(jī)課程之0:認(rèn)清本質(zhì)
  2. 宅男程序員給老婆的計(jì)算機(jī)課程之1:認(rèn)清實(shí)際
  3. 宅男程序員給老婆的計(jì)算機(jī)課程之2:怎么看待牛人
  4. 宅男程序員給老婆的計(jì)算機(jī)課程之3:架構(gòu)比較
  5. 宅男程序員給老婆的計(jì)算機(jī)課程之4:SQL vs NoSQL
  6. 宅男程序員給老婆的計(jì)算機(jī)課程之5:設(shè)計(jì)模式
  7. 宅男程序員給老婆的計(jì)算機(jī)課程之6:模版引擎
  8. 宅男程序員給老婆的計(jì)算機(jī)課程之7:運(yùn)維的重要性
  9. 宅男程序員給老婆的計(jì)算機(jī)課程之8:控制器
責(zé)任編輯:彭凡 來(lái)源: 51CTO
相關(guān)推薦

2012-03-01 09:27:23

宅男程序員

2012-05-14 09:33:21

宅男程序員

2012-05-02 13:30:50

2012-02-14 10:33:12

宅男程序員

2012-02-21 09:37:07

宅男程序員

2012-02-06 10:52:14

宅男程序員

2012-02-01 10:19:02

宅男程序員計(jì)算機(jī)課程

2012-05-21 09:04:12

宅男程序員

2012-02-15 14:40:17

宅男程序員

2012-03-27 09:43:28

宅男程序員

2012-04-26 08:12:01

2012-02-09 10:02:41

宅男程序員

2012-03-05 09:48:03

宅男程序員

2012-02-12 13:31:36

2023-08-07 12:11:26

CPU存儲(chǔ)器SSD

2011-05-11 09:42:27

程序員

2011-08-01 15:48:14

2011-07-13 14:26:23

域控制器活動(dòng)目錄DNS

2012-04-09 09:42:56

2022-04-11 15:59:21

計(jì)算機(jī)
點(diǎn)贊
收藏

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