2011-02-04 65 views
3

我是一名前端开发人员,我发现自己处于jsp视图层,并且看到了很多将数据(模型)推入视图的解决方案。最近我遇到了一个taglib解决方案,它将数据导入jsp,这对我来说似乎更加自然和明智。MVC与Taglibs,意见/选择?

首先问题

鉴于单页,并把它看作一个单独的实体,MVC使得绝对意义,但是单个页面可能相当复杂,最有可能重用那些对其他使用的组件/服务页面。因此,控制器也变得相当复杂。

根据我的经验,页面也是可变的,因为客户喜欢在下一次“重新设计”时转移功能或将整个站点翻出来。这通常导致一个相当繁琐的重构项目,字面上每件事都需要重写。

然后出现一致性问题,在一个页面上,数据集被放入ModelView中作为“列表”,在另一个“list”可能要抽象的页面上,它被放入ModelView中作为“specificList”。在项目生命周期中保持一致性是一项单调乏味的任务,通常会被避免,但这正是纯粹的MVC解决方案所发生的情况。

解决方案?

因此,在我继承的最近一个项目中,我看到了两种将数据拉入pageView的解决方案。第一个使用jsp:include来调用一个jsp页面并且关闭另一个控制器是相当难看的。

第二次我发现相当优雅,他们使用taglib将特定数据集拉入pageView。 Taglib记录在TLD内部,使用起来很愉快。突然之间,我可以在多个页面上重复使用数据,而不会弄乱控制器。

因此,在这个项目中,我不得不实施“重新设计”,所有拉动解决方案的数据使我的工作轻松了很多,但是在它们所使用的数据注入点(MVC)这是一个痛苦的屁股(我我不是一个Java开发人员)和Java开发人员来帮助解决问题。

另外taglibs在正确编写时只能写入一次,而使用数据注入(MVC)可以成为您经常需要关注的子项(位于jsp的顶部)。

的Taglib例如

比方说,我们用下面的标签定义/实现services.tld。
- getEmployeeAddress
- 装getEmployees

<services:getEmployees filter="a"> 
    <!-- loop, get addresses, otherwise if empty list, render nothing --> 
</services:getEmployees> 

这让我(的frontender)到几乎任何页面显示雇员和他们的地址,腾出更重要的任务一个Java开发。该服务可以从pageView控制器单独测试,pageView控制器变得复杂得多(比如说只处理身份验证和网站范围的功能),生活(至少对我来说)似乎更有趣。

我的问题

多部分实际上是:

1)是我的推理废话,如果是这样,为什么,从什么角度? = P

2.)有更好的选择吗? (我也用瓷砖为例)。

3.)您是否正在使用上面提到的taglib解决方案,您的经验如何?

4.)从java开发者的角度来看,以上taglib解决方案的成本/效益/风险是什么?我知道为什么MVC对于Java开发者来说很简单,但以我的经验(沙发)来说,它只是把困难转移到了jsp层,就像我有时需要为每个页面学习一个单独的API ......哦,作为一名前端开发人员,我确实承认,使用Ajax进行数据抽取对我来说更加自然,而且所有这些都令人不寒而栗,在页面加载时所有数据都是我的区域中的反模式...

+1

哦,随时全力以赴在业务逻辑所属= P – BGerrissen 2011-02-04 14:18:52

回答

1

您已经清楚地听到在JSP中实现业务逻辑是不好的。但你明白为什么?

其中一个原因是技术问题,即何时提交HTTP响应的问题。

在基于MVC的系统中,控制器检查参数,确定需要完成的操作并尝试执行该操作。然后在此基础上设置响应状态码并提取要显示在响应中的数据。最后,它选择一个视图(例如一个JSP)并将控制权交给JSP引擎来提交HTTP响应。

如果您尝试在JSP中执行所有操作,则会出现HTTP响应可能过早提交的问题;即在您的业务逻辑完成之前,这将决定正确的HTTP状态码。


你用MVC的不满似乎从你的假设来主要根源是,控制器和视图(JSP)是由不同的人来实现:即“前端开发”和“Java开发”谁拥有非重叠的技能组和职责范围。我的看法是,你应该拥有能够在“围墙”两侧工作的“开发人员”。事实上,根本不应该有一个围栏。

+0

啊!正如你所说,这不是MVC的错,但开发人员? [讽刺] @BGerrisan让下一次只雇用MVC贷记的开发者是一个教训![/讽刺] – Christian 2011-04-17 10:56:14