2009-04-17 131 views
0

作爲一個具有零設計技能和對跨瀏覽器佈局問題的厭惡的程序員,哪些Web框架將佈局代碼與業務代碼最好地分開了?什麼是設計師最友好的網頁框架?

理想情況下,業務代碼和佈局代碼之間的區別應該清晰地(如在單獨的源文件中以及在邏輯上),佈局代碼易於被設計人員理解,以及由我喜歡的業務代碼。對這兩種觀點的工具支持是一個優點。

因此,對於您選擇的語言(php,.net,ruby,python,java等),您推薦哪種框架?

Wicket是迄今爲止我發現的Java中最好的一個,但佈局代碼仍然有很大的機會與業務代碼混淆。

回答

4

MVC frameworks的目的是將佈局和業務邏輯從數據存儲中分離出來。

大多數框架可以更容易地區分這些方面,但是您仍然可能違背您使用的框架的精神,並將其與數據庫模型中的佈局邏輯混淆起來。這些框架並沒有消除糟糕的設計和實施。

我已經使用了CodeIgniterCakePHP(這兩個都是PHP MVC框架)。

CakePHP提供了很多庫和功能,但通常被認爲有點慢(儘管它對於大多數需求來說足夠快)。

CodeIgniter非常精簡,被認爲是最快的PHP MVC框架之一。我只是因爲CakePHP比我的基本站點需要更多的東西而轉移到了這個。

選擇您可以使用它檢查出的特點,並嘗試選擇哪個滿足您的所有需求,而無需提供太多你不會使用一個之前。

+0

同意。但是有些框架在鼓勵適當的分離方面比其他框架更好。這個問題的目的是爲了讓你認爲在這方面哪些是非常好的。 – Leif 2009-04-17 17:51:08

+0

哎呀,錯過了你的編輯! – Leif 2009-04-17 17:51:49

+0

是啊...我想快速總結和發佈,然後在編輯中跟進更多細節。當我還在打字時,給OP提供一些思考/閱讀的內容。 – 2009-04-17 17:54:26

4

在Python端,我聽說過Django好東西。我計劃在有機會時試驗它。它似乎強化了每個層之間的嚴格界限,儘管我認爲如果您嘗試使用真的,您可以在視圖中混合使用業務邏輯。

我也在.NET領域聽說過ASP.NET MVC的好東西。但是,我還沒有嘗試過,所以不管它是否讓事情保持分離,我不能說。

在PHP中,我已經看了幾下,但有些似乎是...過頭說得客氣一點。雖然Symfony(例如)聽起來很有趣,但它似乎也很快變得非常複雜。

1

對於我的PHP後臺我用笨上面和我的JavaScript我用Yahoo UI的建議。這聽起來像你正在嘗試,一方面使代碼更易於維護和,另一方面,在編碼刪除跨瀏覽器的問題。你的後端語言不會解決第二個問題。我建議你看看YUI的CSS重置文件或類似的前端。

2

說實話 - 我還是喜歡ASP.net,並使用asp.net AJAX擴展,它(從我的角度來看)仍然是創建Web應用程序的最簡單,最通用和最好的框架。

我試過java中,JSF,GTK,春天,asp.net的MVC和其他許多 - 但仍。用純asp.net創建好的網頁/應用程序的能力仍然勝過其他人。爲什麼? Asp.net經過了很好的測試......事情起作用了......與許多其他因爲一些愚蠢的錯誤或不可能實現的功能而不斷在頭上撞牆的人不同。

當談到劃分UI,業務邏輯和數據邏輯 - 我仍然要說,除非你需要一個100%的分成作爲UI視圖(MVC模式),asp.net仍然是正確的選擇。代碼隱藏和UI的分離對於大多數用途來說已經足夠好了。人們傾向於大喊MVC在測試時會好得多...也許是......但現在我已經設法做了單元測試,沒有MVC和MVC的複雜性。這更像是不是試圖將其歸咎於框架/模式,而是試着問「我們正在測試正確的東西 - 方式......」?設置一個好的3層web應用程序,你將創建好的,易於編碼的網頁。

的注意事項在這裏:我通常是從我的客戶,我運到印度進行切割和接收靜態HTML的頁面收到PSD-文件。經過短暫的修改後,我就可以在新設計中使用我的編碼解決方案來運行了......就這麼簡單!

現在......在另一方面,它可能只是因爲我知道ASP.net之最;)

0

海邊。在所有主要Smalltalks(吱吱聲,pharo,寶石,視覺作品,VA,海豚,gst)。 它可以幫助您避免模板,這是在嘗試將佈局與業務代碼分開時的主要代碼異味。

它使用一個生成的代碼(+單獨的CSS)的工作樣式。這意味着您可以很好地重構和構建代碼。從海邊示例:

renderContentOn: canvas 
canvas form 
    class: 'eventEditor'; 
    with:[ 
     self renderWhoOn: canvas; 
      renderWhatOn: canvas; 
      renderWhenOn: canvas; 
      renderWhereOn: canvas; 
      renderIsGameOn: canvas; 
      renderGameTypeOn: canvas; 
      renderButtonsOn: canvas] 

其中canvas類是一個html構建器。 Smalltalk具有級聯(;),所以第一個自我發送renderWhoOn:,然後自發送renderWhatOn :. renderWhoOn:方法看起來像這樣

renderWhoOn: canvas 
self decorateDivAndLabel: 'Who' on: canvas around: [ 
    canvas select 
     id: tagId; 
     selected: model who; 
     list: model whoList; 
     callback: [:value | model who: value]] 

Smalltalk具有匿名方法(塊)。在decorateDivAndLabel:上:圍繞:方法 第一渲染本身,然後其塊的值:

decorateDivAndLabel: aString on: canvas around: aBlock 
canvas div: [ 
    canvas label 
     for: (tagId := canvas nextId); 
     with: aString,':'. 
    aBlock value] 

(字符串相結合,與逗號操作者而不是+)。

0

Ruby on Rails和Python Django。

如果你想要一個輕量級框架,你可以從Django開始。 如果你想要一個完整的包,你可以選擇Rails。

1

Ruby on Rails應該是一個不錯的選擇。但是你應該有一個強大的MVC架構概念。 Rails上的Web應用程序正在以極快的速度建立。另一個優點是它對數據庫語言幾乎沒有任何要求。數據庫表映射到模型,所有的編程只能用一種語言完成:Ruby。