组件化
组件是 Tapestry 中的核心概念,将页面模版与 Java 类做对应。在运行时框架管理组件生命周期与行为,最后输出 HTML 到客户端。
Tapestry 组件化所要达到的目标是使 Java 程序员更容易理解页面构成,使应用开发周期缩短。
但这样的组件化思想有个根本性的问题:不同编程模型在做映射的时候存在不匹配问题,与 ORM 的“阻抗不匹配”类似。
模版
从输出展现上看,前端与后端的分离是必须的。前端程序员主要使用 HTML/CSS/JS 进行开发,不关注后端的组件构成。在页面布局设计上面是以展现结构进行模块化,比如分为页头、侧边栏、页脚、主体等。各部分的展现在运行时通过模版引擎即可完成组合,后端也只需要往不同模版组装填充对应数据,后端对应页面的组件化方式就显得多余了,并且处理过程繁琐,性能低下。
IoC
对象状态管理是面向对象设计中比较复杂的一个问题。IoC 主要是为了帮助应用开发者管理对象,降低实现难度。但从实践出发,应用在设计的时候一般不会考虑使用 IoC 管理域对象,而只是使用 IoC 管理服务。这样的话其实使用 IoC 意义也不是很大了,工厂方法已经足够。
现在,随着分布式技术的普遍使用,JVM 内存领域对象必须做到最小化,以规避状态同步带来的复杂度和性能问题,目前的 IoC 容器并不能做到这一点。
总结
- 组件化模型存在问题
- 模版功能单一,只是为了辅助组件化
- IoC 实践意义不大
- 多客户端视图渲染不宜扩展
- 过于依赖 HTTP 会话
- 版本不向后兼容
框架是程序的半成品,其目的是为了降低开发难度,缩短开发周期。从某些方面上看,也是为了限制开发者,做到全局上的实现统一。