What is it
Row Data Gateway对应数据源中的一个数据记录,它的一个实例就是一行数据
How it works
Row Data Gateway可以和Transaction Scripts一起和谐的工作。由于它对应一行的数据,故此在使用中会面对将查找操作放置在哪儿的问题。我们可以采用静态函数的查找操作,但是这样丢掉了通过多态来生成多个相似查找操作的可行性。另一种方法是使用Row Data Gateway的时候,搭配一个finder对象。
Row Data Gateway和Active Record比较类似,区别在于是否其中含有业务逻辑。Row Data Gateway只是包含数据访问逻辑,而没有任何业务逻辑
使用Row Data Gateway的时候,也要注意Update数据时的逻辑。
Row Data Gateway写起代码来比较繁琐,不过使用MeatData Mapping就好多了,数据访问代码可以自动生成
When to use it
一般的,在使用Transaction Scripts时使用Row Data Gateway;在使用Domain Model是则不使用Row Data Gateway,对于简单的数据映射,可以采用Active Record,复杂的可以采用Data Mapper,后者对数据库有很好的封装,使得Domain Object可以不必了解数据库的结构
有趣的是,Row Data Gateway经常可以和Data Mapper一起很好的使用,虽然这看起来增加了很多额外的工作,实际上如果Row Data Gateway是在手动添加Data Mapper时通过Metadata自动生成的的话,这样做也是很有效率的。Row Data Gateway起到了Domain Object和数据库之间的隔离带的作用,可以使你在不更改业务逻辑的基础上更改数据库结构。
在Transaction Scripts中使用Row Data Gateway的时候,需要注意,如果你有一些业务逻辑在几个Scripts中都有出现的话,将业务逻辑加入到Row Data Gateway中,把Row Data Gateway变为Active Record,这将有效的减少业务逻辑的重复代码