金氧

吐槽 Tapestry

组件化

组件是 Tapestry 中的核心概念,将页面模版与 Java 类做对应。在运行时框架管理组件生命周期与行为,最后输出 HTML 到客户端。

Tapestry 组件化所要达到的目标是使 Java 程序员更容易理解页面构成,使应用开发周期缩短。

但这样的组件化思想有个根本性的问题:不同编程模型在做映射的时候存在不匹配问题,与 ORM 的“阻抗不匹配”类似。

模版

从输出展现上看,前端与后端的分离是必须的。前端程序员主要使用 HTML/CSS/JS 进行开发,不关注后端的组件构成。在页面布局设计上面是以展现结构进行模块化,比如分为页头、侧边栏、页脚、主体等。各部分的展现在运行时通过模版引擎即可完成组合,后端也只需要往不同模版组装填充对应数据,后端对应页面的组件化方式就显得多余了,并且处理过程繁琐,性能低下。

IoC

对象状态管理是面向对象设计中比较复杂的一个问题。IoC 主要是为了帮助应用开发者管理对象,降低实现难度。但从实践出发,应用在设计的时候一般不会考虑使用 IoC 管理域对象,而只是使用 IoC 管理服务。这样的话其实使用 IoC 意义也不是很大了,工厂方法已经足够。

现在,随着分布式技术的普遍使用,JVM 内存领域对象必须做到最小化,以规避状态同步带来的复杂度和性能问题,目前的 IoC 容器并不能做到这一点。

总结

  • 组件化模型存在问题
  • 模版功能单一,只是为了辅助组件化
  • IoC 实践意义不大
  • 多客户端视图渲染不宜扩展
  • 过于依赖 HTTP 会话
  • 版本不向后兼容

框架是程序的半成品,其目的是为了降低开发难度,缩短开发周期。从某些方面上看,也是为了限制开发者,做到全局上的实现统一。

« 消息推送技术 如何跳过过滤器处理? »