metadata mapping

想要开始研究下beego中orm的实现,由于之前看过《企业应用架构模式》,知道里面有讲过对象关系映射的理论知识。所以有翻出了这本看的一知半解的神书。

metadata mapping应用场景是,转化同类型(同一个业务领域)不同格式的file到内存中的obj,转化一个db中的不同表到内存中的obj,可以使用metadata mapping节省大量的冗余代码。不用显示的为每个table写列名的组织方法和设置内存域的主体逻辑(这里仅说下db,file的最下面有个连接,是martin fowler写的很清晰)。

之前在用rose框架时,发现rose确实缺少帮助开发者管理column到field映射的库,例如columnList很可能用在很多的select语句中,在rose只能通过常量管理,小项目还好,业务复杂的大项目就降低可读性了。

也有同学用到spring中的RowMapper来简化load db结果这块逻辑。但是sql还是放到了一个配置文件中,大量的columnName,搞的眼花缭乱。实际上直接搞一套mapper即可。我回去又看了一下这位同学使用的方法,在mapper中用到了columnName,并set到相应的对象中。这么错,可维护性非常差。真心是没搞懂orm是什么的表现。

mapping的实现有两种方法,反射和代码生成。

反射,使用时,需要注意性能敏感的环境。

代码生成,是预处理,主要是代码管理的代价。

附:
http://martinfowler.com/ieeeSoftware/metadata.pdf

metadata mapping
Share this