【问题标题】:Enterprise Web Application Architecture Question企业 Web 应用程序架构问题
【发布时间】:2011-08-06 22:43:32
【问题描述】:

我想知道是否可以在不使用标准 MVC 结构和应用程序服务器的情况下开发企业级 Web 应用程序,方法是将业务/流逻辑和会话数据传输到客户端大小的 Javascript 并让它说话直接到 REST 数据服务...也许我们可以使用授权/身份验证层和位于数据服务之上的第二个验证层。所有这些服务都在标准的 HTTP 方法上运行,支持可配置的日志记录和监控,内容或查询参数都包含在 HTTP 请求/响应正文中。静态 HTML 和 Javascript 提供给浏览器,其余由 Javascript 函数执行,与基于 HTTP 的授权/身份验证、验证和数据服务通信。您认为这种架构能满足企业级 Web 应用需求吗?

【问题讨论】:

    标签: architecture enterprise


    【解决方案1】:

    有可能,但不太可能;向您推荐这种架构的驱动因素是什么?只是为了与众不同还是有一些特定方面可以最好地解决?

    通过承载业务/流程逻辑 和会话数据到客户端 Javascript 并使其与 REST 对话 直接数据服务

    理论上您仍然可以拥有一个适当分层的解决方案(业务逻辑 (BL) 脚本与以 UI 为中心的脚本),但实际上它会很混乱,而且您会失败将其物理分离为不同层的能力。这可能会在系统生命周期中的任何地方“咬”你。

    “企业”级系统很少很小,我不想考虑您必须通过网络发送多少逻辑来支持给定的操作/流程。

    将所有 BL 放入脚本语言会将您与该平台联系起来,并且平台会随着时间而变化。脚本的坏处在于,虽然它们在一定程度上是稳定的,但我建议它们比 Java 或 .Net 等基于服务器的平台更容易受到变化的影响。在企业场景中,服务器将有非常严格的变更控制和为它们规划的升级路径——而浏览器则更容易接受定期变更。

    存在兼容性问题 - 除非您被绑定到特定浏览器(到版本级别),否则要保证一致的行为将变得更加困难,并且可能需要更多的开发工作。假设您成功交付了解决方案;当企业想要利用移动计算(例如 iPad)时,您会怎么做?您唯一的选择将是浏览器——您将无法利用该平台的任何原生优势。 “网络和浏览器”似乎会永远存在——但我猜想这就是 MainFrame 人当时所说的。以服务器为中心的解决方案将以更少的费用为您提供更多的生活。

    人员配备将是一个问题 - 您需要非常强大的 JavaScript 和服务器端开发人员。

    安全性:将核心 BL 放在暴露得多的客户端听起来非常危险。

    编辑:

    Web 应用程序可以被播种的原因有很多——其中没有多少理由足以将您的 BL 放在客户端的 JavaScript 中全部。为性能而构建应用程序本身就是一个完整的领域 - 我建议您在完全取消 n 层 Web 应用程序之前更熟悉为性能而构建和实现 :)

    关于保持层分离:有不同的方法可以做到这一点,但归结为抽象 - 更准确地说是牢记良好的设计原则;如果您还没有听说过SOLID,那将是一个不错的起点。在实现方面,开始阅读Dependency Inversion(仅供参考 - 自我推销,这些文章是我的,并且专注于 .Net,但你也应该没有问题追踪基于 Java 的文章)。

    【讨论】:

    • 非常感谢阿德里安这么好的回答。尝试不同的路径绝对是驱动因素之一,但最强的驱动因素是我在各种 Java 框架上开发的 Web 应用程序的低响应性 - 即 Spring MVC、Struts 2 和在 OC4J 和 Tomcat 上运行的 Oracle ADF。这可能是我在 Java 框架和应用程序服务器上采用的不良做法,但不知何故,我在开发基于 PHP 和 Ajax 的脚本密集型 Web 解决方案时获得了更大的响应能力和敏捷性。
    • 即使我使用传统的 n 层方法并在物理上分离各层,从逻辑意义上讲,这些层仍然保持相互联系,在不知道其规格的情况下无法运行另一个,每个人都必须了解其他人的变化。 Javascript 不是实现 BL 的完美媒介,我完全同意你的观点……我不知道是否可以通过加密发送过来的 Javascript 代码来隐藏逻辑,但这不会改变事实上,JS 开发/维护相当混乱。
    • ...这让我想到了将 BL 层实现为一个单独的服务层,就像 BPEL 一样,但它是一个可以在标准 HTTP 方法上运行的更轻/最小的版本。这种解决方案可以尝试解决 JS 和浏览器依赖问题,并且在应用程序移植到另一个平台(例如桌面和移动设备)时仍然可以运行。
    • 当我使用 WSO2 数据服务服务器和 Axis2 wsdl2java 工具生成的客户端库作为数据访问层时,我受到了启发,我可以说它比 ORM 对我来说更舒服。 ..但我希望我可以在没有 SOAP/WSDL 膨胀的情况下实现相同的功能,使用支持 XML 和 JSON 的轻型基于 HTTP、类似 REST 的结构,用于数据访问和 BL。
    • 再次感谢阿德里安的回答...想进一步了解您的想法。
    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 2012-04-24
    • 1970-01-01
    • 2014-03-01
    • 2011-05-23
    • 1970-01-01
    • 2012-05-05
    • 2012-11-22
    相关资源
    最近更新 更多