成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

宅男程序員給老婆的計算機課程之8:控制器

原創
開發
這個系列來自一位宅男程序員,這個系列是他寫給老婆的電腦課程。以下,開始本系列的第8篇——控制器。如果程序員有良好的開發風格,基本是使用最基礎的php page controller,也可以達到類似的效果。

設計模式再“高級”一點,便是所謂的“框架”了。

從事Web開發,一般都會接觸到MVC框架這個概念。

M:也就是Model,直接跟網站數據庫相關。

V:也就是View,是網頁的模版,跟顯示數據相關。

C:則是Controller,相當于網站的業務邏輯。

MVC也不僅僅是應用于網站開發,它的概念實際上植根于桌面軟件,并且在手機軟件開發上也有應用。

MVC本身是一個設計模式,是一個被驗證過的,可以用來很好歸納、管理代碼的軟件開發方式。

基于這樣的設計模式,提供了很多相關的類庫實現,則“設計模式”升級為“框架”。

MVC的任何一個方面,擴展出去講,都可以講上幾天幾夜。

今天只講C。

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

Page Controller簡單的說,便是一個網址對應一個程序文件。

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

這樣的模式,是網站從靜態轉向動態是最自然的改變方便,也最為容易讓初學者接受。

但隨著網站的復雜化,這樣的模式會慢慢顯得不夠方便;比方說,多個不同的網址,映射到相同的處理;比方說,處理的時候,復用共同的資源。

頁面內容的動態化,同一個程序文件,顯示的內容是動態生成的 - 根據不同的query string,生成不同的內容,如:show.php?id=1234

網頁程序內部,實際上是需要解析網址中的query string,并做不同的操作。

這實際上是一個映射的過程,將網址映射到相應的處理。

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

這是通過某種機制,將符合各種規則的網址請求映射到程序中的一個類,或者是一個函數處理。

一般上,是使用正則表達式解析網址,并映射。

將網址映射到一個類;

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

將網址請求映射到類,是相對較“重”的處理方式,比方說,需要處理類的初始化等等。

有的框架,也可以是一個函數,則相對“輕量”一些:

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

類、函數,均各有優劣,但實際差異很小:

 映射到類的方式,往往還會根據不同的HTTP header映射到類里面中相映的函數,比方說,將對 /home 的HTTP GET請求映射給 hello 類的 GET 函數;而對 /home 的 HTTP POST請求映射給 hello 類的POST函數。

這部分 url routing的設計與實現,各種語言、平臺上的功能均向正則表達式靠攏,大同小異。

有的可能專門為 restful 做了優化,但即便木有,自行實現也并不復雜。

很多請求,都會有一些常用的默認處理,比方說,檢查用戶是否登陸,檢查用戶是否有權限等等。

這些業務控制邏輯,是完全可以復用的。

在Page Controller的場景下,一般是通過繼承來實現;而Front Controller場景下,而一般通過函數修飾符的風格實現,如:

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

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

Controller的改進,目的在于更加方便的維護代碼、修改業務邏輯。

如果程序員有良好的開發風格,基本是使用最基礎的php page controller,也可以達到類似的效果。

各種“先進框架”,實際上是將常用的模式抽象出來,并通過便利的約定方式向程序員開放;如果程序員缺乏維護代碼的意識,也很可能將良好的約定習慣用濫。

需要了解的,是為什么各框架的controller設計會有這樣的設計,并用好;而不是死板的遵循“開發指南”。

在簡單業務場景下,實際上page controller會更加方便。

有這么一個“定理”:概念越簡單的模式,在處理簡單場景時,是越便利;但隨著場景復雜化,簡單的模式會越來越難以維護。

而概念相對復雜、高級的模式,處理簡單場景時,會相對麻煩;但隨著場景復雜化,則比簡單的模式容易維護。

“復雜度是守恒”的:
  模式簡單,維護則復雜。
  模式復雜,維護則簡單。

一個復雜的地方變簡單了,則另一個地方會變復雜;保持代碼結構的清晰,不要自己給自己添麻煩。

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

普通復數形式,加s: pigs / cats / dogs

已經可以很好了,但偏生有人要增加不規則復數:

 sheep / mice / wives

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

作業

1. 說說對 restful 的理解

2. 什么是 reverse proxy ?

51CTO系列:

  1. 宅男程序員給老婆的計算機課程之0:認清本質
  2. 宅男程序員給老婆的計算機課程之1:認清實際
  3. 宅男程序員給老婆的計算機課程之2:怎么看待牛人
  4. 宅男程序員給老婆的計算機課程之3:架構比較
  5. 宅男程序員給老婆的計算機課程之4:SQL vs NoSQL
  6. 宅男程序員給老婆的計算機課程之5:設計模式
  7. 宅男程序員給老婆的計算機課程之6:模版引擎
  8. 宅男程序員給老婆的計算機課程之7:運維的重要性
  9. 宅男程序員給老婆的計算機課程之8:控制器
責任編輯:彭凡 來源: 51CTO
相關推薦

2012-05-21 09:04:12

宅男程序員

2012-02-01 10:19:02

宅男程序員計算機課程

2012-02-14 10:33:12

宅男程序員

2012-02-21 09:37:07

宅男程序員

2012-03-01 09:27:23

宅男程序員

2012-05-02 13:30:50

2012-05-14 09:33:21

宅男程序員

2012-02-06 10:52:14

宅男程序員

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存儲器SSD

2011-05-11 09:42:27

程序員

2022-04-11 15:59:21

計算機

2011-08-01 15:48:14

2011-07-13 14:26:23

域控制器活動目錄DNS

2020-11-13 15:31:31

程序員計算機考研
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一二三 | 欧美一级二级三级视频 | 国产激情偷乱视频一区二区三区 | 91精品久久久久久久久久入口 | 国产综合久久 | 免费黄色网址视频 | 国产日批 | 午夜在线视频一区二区三区 | 亚洲精品自在在线观看 | 精品免费国产一区二区三区四区介绍 | 一区二区亚洲 | 奇米久久久 | 麻豆视频在线免费观看 | 亚洲成人精品一区 | 99久久婷婷国产综合精品 | 毛片免费看 | 国产欧美日韩视频 | 伊人网伊人网 | 91亚洲精品在线 | 无码日韩精品一区二区免费 | 一区二区国产精品 | 97久久久久久 | 亚洲一区二区三区桃乃木香奈 | 国产一区二区在线视频 | 久久久久国产精品免费免费搜索 | 国产视频一区二区三区四区五区 | 国产三区四区 | 久久久久久九九九九九九 | 日韩欧美网 | 天天干天天爱天天操 | 99热这里只有精品8 激情毛片 | 91久久精品一区二区三区 | 精品久久久久久久久久久久久久久久久 | 91麻豆产精品久久久久久 | 国产专区在线 | 欧美大片一区 | 亚洲a视频| 精品成人佐山爱一区二区 | 91精品久久久久久综合五月天 | 国产色在线 | 国产精品入口 |