一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

聚焦與發散——淺談編程的發展方向

  最近在找工作,所以重新開始看書,重新整理知識體系,而現在上海的晚上很濕熱,睡不著,就產生了這些想法。

  不說更早的歷史,就從dos開始說起。dos剛出來的時候是單進程的,根據人們的需求發展出了多進程的概念,而這種技術一直被保留到現在。現在的操作系統好像沒有單進程的系統了吧。那為什么要有多進程,為什么會有這樣的需求?比如你現在打開了word考試撰寫文檔,而又想要上網去查找一些資料,如果是單進程的,那就意味著打開了word就不能開IE,要開IE就要關掉word。那樣操作起來肯定會很麻煩。這個和編程的發展方向有什么關系呢?暫且繞開這個話題,先看看我們寫一個web網站是如何工作的。

  web的工作方式,肯定需要是有一個宿主(專業點的說話,比如IIS、Apache等),然后寫一段程序,把這個程序配置到宿主中,就可以訪問了。 那什么是宿主,它在做哪些事情?剛才都說了宿主就是比如IIS之類的程序,可以理解為一個容器,它有一些接口,只要滿足這個接口規定的程序,就可以在這個宿主中運行。為什么我們寫的一面一定要以ASPx后綴結尾?為什么ASPx頁面里不能寫匯編?這個可以理解為一種協議。怎么理解這個協議的作用呢?那就要知道IIS所扮演的角色。當你訪問IIS某個站點的某個文件的時候,它就知道去哪里、以什么方式來運行所要做的事情。這個和C#里接口的概念很相似,你只要滿足接口,那么就可以扔到一個上下文中去執行。

  假如,你來開發一個宿主,需要做些什么?首先,需要寫Socket偵聽,偵聽到連接,開始接收請求的數據(HTTP協議消息),然后解析消息,按解析結果執行,最后返回結果。大致這么幾個過程。而所有的人都在請求這個IIS,這就是聚焦。用戶使用的客戶端是發散的,而所有的請求,都會聚焦到這個點上。這個聚焦的點,在IIS內部就是Socket?事實上不能這樣理解。HTTP請求所用的Socket是一對一的,也就是說,每個用戶請求IIS之后,IIS內部對每個請求有一個隔離。每個用戶都有自己當前請求的上下文,這個上下文是獨立的,而我們的代碼只有一份,所以的請求,運行的進程、線程,代碼對它們來說就是聚焦的。就是說,現在我們開發的web應用,是在維護一份代碼,而讓他們可以發散地(多線程、進程地)工作。事實上,單機程序,c/s架構也是和web的開發方式一樣的。開發人員不會為每個人開發獨立的應用,至于個性化,那是軟件的一部分。

  這個道理誰都懂,上面的分析有點畫蛇添足的味道,無量天尊!~~~

  事實上我們開發的應用,不全是那樣。比如靜態變量等全局應用,是在運行時唯一的。在處理這些全局數據時,我們一般會lock,和數據庫應用的悲觀鎖是一個概念。這個地方就會產生一個問題,全局數據會影響所有人的響應,一旦全局數據出錯,那是致命的。這就是我們這里要講的聚焦效應。靜態數據是運行期有聚焦效應,而代碼就是編碼期有聚焦效應,并且這個效應更加明顯。對一處代碼的改動可能會影響很多地方,那么這里的代碼就是聚焦的。在C#編程中可以理解為,接口、超類、生產者都是聚焦的。這個焦點改變了,那么影響是巨大的。可以想象下,凸透鏡的焦距發生變化,要保證焦點不變,那么光源的光線就要全部變化。為了適應這種變化,各種理論發展起來,而OO就是其中之一。OO的多態是在擁抱變化,而這個過程就是發散的過程。

  假設,現在開發的應用都毫不相干,沒有任何可以提取公用的部分,也就是說,提不出接口,泛化不出超類,那整個代碼都是發散的。而OO里面很關鍵的就是要提取不變的部分,設計會變的部分,這是代碼重用里最重要的思想,我是這么認為的。我認為這就是一種聚焦思維,而未來一段時間編程的發展也會朝著這個方向發展。如果認為一個系統哪個地方都需要變化,那就根本沒有代碼重用的可能。而事實上,一個軟件的代碼中總有能重用的代碼,那就是說總有不變的代碼,總有聚焦的地方。這是不變代碼的聚焦,對于變化的部分,我們也在尋求聚焦點,而這個過程需要作好設計。

  對于變動的代碼,有兩種開發的方式。一個是提供服務的,而另一個是享受服務的。這句話怎么說呢?比如,在C#開發中,調用.NET Framework類庫,那就是享受服務,這個是發散的。而提供服務最容易想到的就是工廠模式和委托。和在網站開發中模板的方式類似,在網頁中設置一個替換符號,用內容來填充這個符號。委托也是這樣,在一個應用中,定義了一個方法執行這個委托,我們不知道他的工作方式,但是我們已經在使用它,這應該算是一種逆向的思維。插件架構就是這樣工作的,由配置來決定調用哪個類。而聚焦點就在這個超類或接口。

  最后,可以看出,編寫代碼一共有三種方式。

  第一、不會變化的,這是絕對聚焦的代碼,一旦改變,后果不堪設想;
  第二、類庫式的,這是發散式的代碼,類庫不能控制你怎么提取焦點;
  第三、框架式的,這個是聚焦于接口或超類的代碼,不變動接口和超類,還是可以接受的。 

it知識庫聚焦與發散——淺談編程的發展方向,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 91精品专区 | 色婷婷视频在线观看 | 三级网站免费播放国语 | 日韩视频大全 | 91大神麻豆 | 91福利国产在线在线播放 | 热久久国产欧美一区二区精品 | 中文字幕国产精品 | 天天欧美| 奇米久草 | 久久久高清日本道免费观看 | 青青热在线精品视频免费 | 奇米影视四色7777久久精品 | 久久久午夜精品理论片 | 国产偷久久 | 永久免费精品视频 | 欧美色婷婷| 国产偷国产偷亚洲高清人乐享 | 精品九九久久 | 视频在线观看一区 | 欧美精品综合 | 最近最新中文字幕在线第一页 | 手机看片自拍日韩日韩高清 | 亚洲黄区 | 久久国产网 | 婷婷影院在线观看 | 中文字幕日本一本二本三区 | 久久久青草青青国产亚洲免观 | 国产精品免费一区二区三区 | 五月婷婷六月丁香激情 | 中文字幕91在线 | 欧美特黄a级高清免费大片 欧美特黄a级高清免费看片 | 99在线视频观看 | 中文字幕一区婷婷久久 | 国产精彩视频在线观看 | 97成人在线观看 | 亚洲人的天堂男人爽爽爽 | 国产亚洲精品高清在线 | 日产欧产va高清 | 日韩中文字幕视频 | 九九国产视频 |