知识卡片

Java与.NET平台的默认模式选择建议

普通读书笔记卡

内容

关于Java世界,作者态度鲜明:构建良好的J2EE应用其实并不需要EJB,用POJO(普通Java对象)加JDBC同样能完成任务——事务脚本场景下过度依赖EJB(会话Bean当脚本、实体Bean当行数据入口)虽在中等规模领域逻辑下合理,但一旦想去掉EJB服务器(无论因技术原因还是许可费用),会发现太难摆脱,不依赖EJB的POJO路线反而更灵活;领域模型场景下,简单且贴近数据库结构时用实体Bean没问题(此时实体Bean相当于活动记录),但复杂领域模型建议彻底用POJO实现、只在外面用会话Bean包一层远程外观,这样无需接触EJB容器就能独立编写、运行、调试领域逻辑。有一条建议格外坚决:无论什么情况下用实体Bean,都应尽量避免给它一个远程接口——实体Bean通常对应领域模型或行数据入口,需要的是细粒度接口,而远程接口天生该是粗粒度的,两者根本不搭,因此应该让实体Bean尽量本地化。关于.NET,历史经验显示表模块才是这个平台的默认选择——微软生态里无处不在的数据集(记录集)为表模块提供了大量好用的工具支持,几乎不需要用事务脚本(除非场景极简单),领域模型虽然同样可以在.NET里构建,但工具支持远不如表模块丰富,因此作者宁愿多承受一些复杂性也倾向优先考虑表模块,只有确实需要才转向领域模型。两个平台的共性经验是:具体用哪种模式,最终都要看这个平台的工具生态给哪种模式撑腰最多,而不是纯粹按理论优劣排序。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第8章 通盘考虑"之"8.4.1 Java和J2EE""8.4.2 .NET"(源文件:_epub-src/OEBPS/Text/000055.html、000056.html) - 结论依据:原文说明"要构建良好的J2EE应用,其实并不需要EJB。用POJO和JDBC同样能够完成这一任务……无论在什么情况下使用实体Beans,都应该尽量避免给它一个远程接口……通过观察.NET、Visual Studio以及微软世界应用开发的历史,可以发现:其中起决定作用的模式是表模块……几乎不需要用事务脚本,除非是非常简单的情况",直接支撑本卡结论。 - 原始内容:无论在什么情况下使用实体Beans,都应该尽量避免给它一个远程接口。我一直不知道首先给实体Beans定义一个远程接口的原因何在……对于这个平台来说,表模块是默认的选择。