是否框架的目的是不一樣的?

作為一個新手的疑問?是否框架的目的是不一樣的?thinkphp框架感覺目的是是簡化代碼提高碼農工作效率,然而java的經典框架組合SSH感覺沒有簡化代碼,提高碼農工作效率,只是不停的分層,配置,只是看起來充滿設計感。


struts只是對servlet和jsp小修小補,然而jsp的垃圾設計和垃圾性能無論怎麼補都不如直接用freemarker之類的模板引擎。struts除了不支持參數化url之外,以類作為請求處理器的單元過於臃腫,這點spring mvc(或者spring boot)就好得多。

所有mvc框架的出發點都是儘可能簡潔、抽象地來封裝。以現在的眼光看,你覺得struts的設計一無是處,完全是跟spring mvc或者http://asp.net mvc比較的結果,放到幾年前這樣的設計應該還是可以的。


有的語言天生為web而生,比如PHP。有的語言提供web方面的相關東西但不天生,比如Python/Node

天生的這種沒有框架就能容易的寫一個小網站了,非天生的這種需要稍微的封裝才能讓大家覺得不是很噁心的寫一個小網站

框架大體分為兩種,一種是大而全,比如rails,django;一種是小而精,比如express(不是官網那個生成器),koa。

大框架需要成熟的體系與龐大的社區支持,即對常用場景都有成熟的解決方案,這樣才能活下來。一般包含路由,渲染模板,model 映射,ORM,session,socket 方案解決等常用的東西。基本上只要遵循框架規則即可

小框架只提供基礎 server 搭建,甚至連路由,渲染模板等都會去除。想要使用可能需要官方或者民間的一些中間件,當然這不能說是屬於框架本身擁有

在上個時代,都是伺服器渲染,當然這也很符合正常人思想,所以框架在路由,模板引擎方面不能有太多割捨。現在比較推崇前後分離,數據渲染可以直接交給前端,路由控制也是,這個時候框架就可以割捨這兩個東西,如果比較懶,提供好中間件的介面就不用管其他的了

框架設計初衷應該有很多吧,但是常見的就那幾個,一個語言熱的也不會有幾個。比如python的django大而全,flask精而簡; ruby 的存在或許真的是因為 rails; Node 的express koa 精而簡, 國內奇舞團團隊的 thinkjs 則提供了一整套的解決方案

解決的都是封裝,拆分,劃模塊,組件,兼容的問題吧


解耦合,分層是為了讓程序員面相介面編程,而不是面向實現。


舉一個簡單的小栗子【不黃!!!不黃!!!不黃!!!】:

有一天,你突然想來一場說走就走的大保健,可是世界上的大保健這麼多,該去哪兒呢?

嗯,問問老司機,老司機義正言辭:東莞!

並舉出一大堆諸如服務好、質量高、一條龍巴拉巴拉等各種優點!

好吧,你跋山涉水奔赴東莞!

可是到了東莞之後,是去小巷子里淘寶?是去小旅館裡撿小卡片?還是去大場子里一條龍?

嗯,問問老司機!

老司機恨其不爭:你可是有理想、有道德、沒節操,肩負著崇高使命的優質少年郎,是要去見識大場面的!

好吧,去大場子!

可是這麼多大場子,去哪一個呢?

老司機微微一笑:去TSRJ呀,巴拉巴拉一大堆優點!

來到了華麗的TSRJ大場子,美麗的前台妹妹通過大數據平台知道你是第一次光臨,非常友好的給了你一份大保健菜單:

看著菜單,你欣慰的笑了,溫柔的對前台妹妹說,我都要!

___________

後記

你也可以這麼理解:

1. 想去大保健 == 想做一個網站

2. 大保健的地方這麼多,該怎麼選 == 做網站的編程語言這麼多,該怎麼選

3. 問問老司機 == 問問老司機

4. 東莞 == PHP

5. 為什麼選東莞 == 為什麼選PHP

6. 服務好、質量高、一條龍 == 簡單、粗暴、一條龍

7. 去小巷子里淘寶?是去小旅館裡撿小卡片?還是去大場子里一條龍! == 使用原生PHP?封裝一些常用方法?還是使用框架!

8. 大場子那麼多,該怎麼選 == 框架那麼多,該怎麼選

9. 選TSRJ == 選ThinkPHP

10.給你一份大保健菜單 == 給你一份祖傳的新手文檔

11.[圖]中各服務項 == ROUTE、MVC、ORM、CACHE...

12.我都要! == 我都要!

以上!


如果你指的是SSH與ThinkPHP的目的是否相同,我沒接觸過ThinkPhp,不太好說。但個人覺得,所有框架的目的應該都是相同的:1、封裝,簡化開發 2、解耦,可復用,易修改維護

如果你指的是SSH這三個框架的目的,那的確是不同的。你後面自行學習會有體悟的。

Anyway,清楚要記住一項技術或框架的目的是什麼,出發點是什麼,才不會學著學著就迷糊了。

(本來要上傳一張 裝完逼就跑真特么刺激 的表情圖,結果一看知乎的圖片規範,嚇cry了。。。

請自行聯想熊本熊的那張圖。。。)


殊途同歸,再者理念也不同。


框架是使用核心就是分層+封裝

不論是PHP還是Struts都有分層這個東西,分層意味著合作效率的提高,代碼可維護性的提高。但是真正提高工作效率的還是對內容的封裝,比如某些函數或者底層功能的封裝。


通常框架的目的是可復用,介面化,就相當於一個個組件,代碼層面上已經比正常編碼要少很多了,試想一下,假設j2ee模式中沒有合適層面的框架進行組裝,那樣的代碼量有多大呢?


推薦閱讀:

知乎後台為什麼用python?
可以多個server進程同時監聽一個unix socket文件么?
Django和Flask這兩個框架在設計上各方面有什麼優缺點?
Vim 中如何對 Python 進行代碼補全?
GitHub 上有哪些值得關注的 Django 項目?

TAG:Java | Django框架 | PHP框架 | ThinkPHP | Java框架 |