2009-04-17 100 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。