【问题标题】:Recommendations... JavaServer Faces (JSF), Struts, model2, other建议... JavaServer Faces (JSF)、Struts、model2、其他
【发布时间】:2010-11-23 10:52:26
【问题描述】:

我们正在考虑重新设计一个已经使用了 4 年多的 Java 业务管理 Web 服务。软件的内部架构都是定制的,表现层和业务逻辑的分离很差。整个模型层也证明它无法有效地跟上不断变化的业务逻辑和重构需求。当我计划完成这项任务时,我一直在寻找可用的框架,我可以利用这些框架使应用程序对雇用的新开发人员和不断变化的业务逻辑更加友好。我以前从未使用过 struts 或 JSF,但以一种有点简短和概述的方法阅读它们,乍一看并没有对它们印象深刻,但我发现 JSF 更有趣。

首先,这两个框架似乎都专注于 MVC 模式的控制器和视图部分。让您在模型/业务层上做任何事情。 (我说的对吗?)

对于返工,我们希望能够聘请外部承包商来帮助加快返工,因此找到统一的开发方法对于确保代码质量和减少不一致和加速时间非常重要。

那么对于可能有助于这项工作的框架、实践等,您有什么建议。我真的不想用自定义框架重新发明轮子,以后发现我们处于类似的情况。

【问题讨论】:

    标签: java jsf frameworks struts


    【解决方案1】:

    在采用这种方法时,您应该考虑以下几点:

    1. 您的特定需求与重点 特定框架的
    2. 了解 框架(内部和在 市场)
    3. 学习曲线 框架,以及它在更广泛的开发者社区中的接受度和支持度。

    很多人都高度评价 Spring MVC,但如果 IOC 对您来说是新手(或者您不认同这个概念),这可能比您想“一次性”咬掉更多。

    另一个成熟的选择是 Struts(尽管我强烈建议使用 Struts 2 进行新开发)。

    需要警惕的一点是“框架移植”操作的规模和范围。如果您的应用程序迫切需要进行认真的结构重组,那么您很可能最终基本上从头开始,并将现有业务逻辑的大块挂在基于框架的骨架上。时间/金钱/资源(和机会成本!)不应该被低估,你应该确定管理层真的会买账,这样你就不会在中途被拔掉插头。在这里“测量三次,一次切割”真的很重要,并确保你咬掉了一大块你可以咀嚼的工作——从“遗留应用程序”到“使用所有新技术的全新的最先进的应用程序” " 坦率地说,最好分阶段完成,而不是一次性完成。

    了解应用程序的大小和相对复杂性以及它的基本性质(它是一个非常 Web-UI 密集型应用程序,还是一个执行大量工作的后台系统?)会很有帮助,以便使关于特定框架的更好建议:尽管您当然可以在任何给定框架上构建大多数 web 应用程序,但有些应用程序更倾向于一个方向而不是另一个方向(例如,Struts 和 Wicket 的关注点完全不同)

    此外,在现有应用程序旁边尝试几个候选平台并没有错。虽然我对你当前应用的技术背板一无所知,除非你做了一些非常奇怪的事情,否则很可能安装一个或多个框架并在你现有的应用程序旁边进行试验(例如,针对它们编写新功能,或重写部分使用它们的现有代码,然后将该代码挂钩到后端)。这将让您进行实验并“在购买前尝试”。我建议让您的团队在一个或多个“候选名单”框架候选者上试一试,以了解它在实践中的工作方式。顺便说一句,这并不是一种糟糕的重构方式:逐渐用新框架替换旧功能。

    最后(我认为)建议:仔细查看您的数据模型及其接口。这通常是真正的小精灵所在的地方,无论您希望使用哪种框架都可以做到这一点。我强烈考虑将其作为您的#1 重构目标,而不是采用特定框架。强大的数据模型将使实施任何框架(和处理升级)变得更加容易......并且如果您的管理层改变了您的方向并最终因任何原因延迟框架升级,重构数据模型所花费的时间将会得到回报。

    编辑:

    考虑到您对产品形状的了解,我会加倍强调“非常非常小心”的建议。你现在所处的位置非常普遍(而且臭名昭著),并且已经吞噬了许多团队(和职业)。您需要来自链上和业务方面的利益相关者的强烈理解和支持,因为这将是一项艰巨的任务,从本质上讲,它需要的时间和成本都比您想象的要高。技术团队对成本和变更范围的清晰和现实的能力是成功的关键——如果你大大低估了你的预算、职业生涯,甚至可能危及业务本身。如果你高估了,你可能永远不会开始:)

    一旦您得到管理层的大力支持和支持,一种方法就是真正将其视为一个全新的产品 - 将旧的东西进行维护,卷起袖子,开始设计替换系统您在之前的实施中获得的知识。在这种情况下,我将制定组件和数据交互 sans-framework,然后查看一组给定的候选框架将如何支持该实现。从框架开始可能会将您带到不自然的地方,并可能让您回到路上的类似地点。

    一些著名的流行框架可供查看:

    Struts2 - MVC /w AJAX support

    Wicket - AJAX heavy

    Struts1 - Granddaddy of pretty much all Java frameworks; worth a look

    Spring MVC - Spring's IOC webframework

    【讨论】:

    • +1 - 我要给你的答案已经给了,但你的答案比我最初的计划要完整得多。
    • 该应用程序是一种盒装式解决方案。多年来,新功能被植入到位,因此我们基本上手上有一个弗兰肯斯坦,其中有许多部件和模块如此交织在一起,以至于可以在一个领域做出一些改变,影响整个过程。坦率地说,尽管以可靠的 OOP 方式,架构并不是很好。一个对象有一百多个变量,它的数据库表相同,而不是被分解成多个对象。
    • 因此,由于纸牌屋的脆弱性而逐渐恶化,似乎整个项目需要重新开始,一些后来的代码或模块可以挽救。修改后的接口计划要求一些有 Ajax 的工作。在用户与它们交互时将一些对象存储在会话中。而不是当前的 UI 方法,大量使用基于 javascript 的业务逻辑和不断重新加载用户正在积极使用的相同信息。
    • 这绝对是一个很好的观点,在我们走得太远之前,我必须验证业主完全了解我对情况的评估,毕竟我现在处于信息收集阶段。
    • 嗯,我一直在整体思考这个问题,这是一个头我输了你赢的情况。现有的数据模型紧密集成了系统的各个部分。阻止必要的业务逻辑更改的部分由应用程序的每个功能使用。为了使其工作,我需要一个全新的数据模型,因为目前的数据模型本质上是 1 涂抹了 100 多个变量对象,需要将其表示为更像 10-15 个对象才能有效。这意味着需要触及各个方面才能使这件作品重新整合。
    【解决方案2】:

    如果你喜欢 JSF 并想使用它,我会推荐使用 JBoss Seam。您也可以使用 Spring,但我认为使用 JBoss Seam 可以更轻松地使用 JSF。我现在使用它快 1 年了,效果很好。如果您想将您的流程建模为业务流程,您可以尝试 JBPM(以及 Seam)。

    如果您想了解有关敏捷方法的更多信息,以便改进您的方法和实践,请先查看敏捷宣言http://agilemanifesto.org/。然后开始尝试已建立的方法,例如 XP 或 Scrum。

    但是慢慢来,开始尝试一种改变而不是另一种改变,不要让自己感到困惑

    【讨论】:

      【解决方案3】:

      JSF 使您可以专注于组件,而基于 JSP 的解决方案则不能,或者更多。您仍然会发现自己编写了大量 jsp 化的 html 内容,而使用 JSF 解决方案,您真的不需要。 将 RichFaces 或 IceFaces 视为库。 RichFaces 使得做 AJAX 类型的东西变得非常容易。只需将标签<a4j:support event="onkeyup" reRender="output"/> 添加到您的标准JSF 控件。在上面的示例中,在控件的 keyup 事件上,它将重新呈现一个区域<a4j:region,或另一个 JSF、Richfaces 标记。没有比这更简单的了。

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2011-08-02
        • 2011-08-31
        • 2011-07-28
        • 1970-01-01
        • 2014-04-20
        • 2012-04-15
        • 2014-02-10
        • 1970-01-01
        相关资源
        最近更新 更多