Rails系列教程(3):Database-centric Programming

上一篇 / 下一篇  2008-02-02 15:50:47 / 个人分类:RoR

执行SQL语句的做法通常有2种:1)在程序里面嵌入sql代码(embed)2)使用preprocessor

 

1.ruby中使用嵌入sql语句的做法:

def update_sales_tax

  update = @db.prepare("update orders set tax=? where id=?")

  @db.select_all("select id, amount from orders") do |id, amount|

    tax = calc_sales_tax(amount)

    update.execute(tax, id)

  end

end

 

其实这样的做法已经比java的做法简单很多了,更不用说是c语言对sql的操作,这种特性不是来自于rails,而是来源于ruby,当然作为层次型语言对平面型数据库的操作,本来就有很多不好的地方,其实,最好的解决应该是把数据库转化成层次型,这样更加直接,方便,能够更好的应对需求变更,但是现在的层次型数据库毕竟还没有兴起,只能看看以后的发展情况了

 

但是这样的写法实际上是不好的,我们可以看见程序里面有sql,sql被涵盖在程序的可能出现的角落,结果application logic和database logic纠缠到了一起,这样的纠缠带来了错综复杂的关系,有可能造成了这样一种情况,修改了表里的一个属性项,需要修改很多程序的地方,而且这些地方不一定是明显的,这样的方式把数据暴露出来,就像我们使用继承的时候,使用class instance variables而不去使用方法是一样的,结果是恶劣的,当然这样的行为影响的是维护(maintain),同时我也相信,世界上没有系统一次就能开发完善以致于不需要任何维护。其实这也包含了一个复用和封装的问题,一段代码,如果以非methods的形式出现,而是通过copy来实现,那么这样的拷贝会带来很多的麻烦

 

记住,封装(encapsulation)是解决重复代码的一个很有效的方法,encapulation解决的是:一处修改,处处更新


TAG: RoR

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 22783
  • 日志数: 47
  • 建立时间: 2008-01-29
  • 更新时间: 2008-02-02

RSS订阅

Open Toolbar