MVC与Taglibs,意见/替代方案?

时间:2011-02-04 14:15:40

标签: java model-view-controller taglib

我是一名前端开发人员,我发现自己在jsp视图层很多,并且看到了很多将数据(模型)推送到视图中的解决方案。最近我遇到了一个taglib解决方案,它将数据提取到jsp中,这对我来说似乎更自然,更明智。

首先是问题

给定单个页面并将其视为单独的实体,MVC具有绝对意义,但是单个页面可能非常复杂,并且很可能重用其他页面上使用的组件/服务。结果,控制器也变得相当复杂。

根据我的经验,页面也是可变的,因为客户喜欢在下一次“重新设计”中转换功能或将整个网站翻出来。这通常会导致一个相当繁琐的重构项目,在这个项目中需要重写所有内容。

然后存在一致性问题,在一个页面上,数据集作为“列表”放入ModelView,在另一个“list”可能是抽象的页面上,它作为“specificList”放入ModelView。在项目生命周期中保持一致性变成了繁琐的平凡任务,通常可以避免,但这正是纯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>

这允许我(前端)在几乎任何页面上显示员工及其地址,从而释放java dev以执行更重要的任务。该服务可以从pageView控制器中单独测试,pageView控制器变得不那么复杂(比如说只有处理身份验证和站点范围的功能),生活(至少对我来说)似乎更有趣。

我的问题

实际上是

Multipart:

1。)是我的推理废话,如果是,为什么以及从什么角度来看? = P

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

3。)您使用的是上述taglib解决方案吗?您的体验如何?

4.。)从java开发者的观点来看,上述taglib解决方案的成本/收益/风险是什么?

我理解为什么MVC让Java开发人员变得简单,但根据我的经验(sofar)它只是将困难转移到jsp层,就像我有时需要为每个页面学习一个单独的API ...哦和存在作为一个前端开发人员,我确实承认数据提取对我来说更自然,使用Ajax和所有这些shizzle,在页面加载时提供的所有数据都是我所在区域的反模式......

1 个答案:

答案 0 :(得分:1)

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

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

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

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


您对MVC的不满似乎主要源于您假设控制器和视图(JSP)由不同的人实现:即“前端开发人员”和“Java开发人员”,他们具有不重叠的技能组和领域责任。我的看法是,你应该让“开发人员”具备在“围栏”两侧工作的技能。事实上,根本不应该有围栏。