又是一个不用写代码的Kata,不过这个Kata确实需要仔细思考一下才能得出结论。
在项目中我们常和数据库打交道,项目规模越来越大之后,和数据库的交互就变成了一个独立的研究领域,也有对应的开发人员和维护人员。对于开发人员来说通常不会直接读写数据库,而是把具体工作交给ORM层。这种模式对开发者个人来说虽然能提高一些开发效率并且屏蔽掉一些关联度不高的知识点,但是客观来说是阻碍开发者技术进步的一道屏障。
我是一个Python爱好者,最初写网站的时候用的是Django,虽然Django也有ORM,但是由于我是独立开发网站,整个服务器的配置都需要自己完成,所以对于数据库的配置和操作比较了解。如果大家也想深入了解一下ORM背后是什么,可以自己动手配置一下服务器,同时手动做一些数据库初始化以及查询、调试工作,这样下来应该就可以初步了解数据库了。
跑题了。
在具体操作数据库的时候通常有两种方式,第一种以业务中已经定义的类为单位来获取数据,第二种以数据表中的行为单位来获取数据,分别称为Class方式和Hash方式。
实际使用中,有时候我们无法直接获取想要的数据,可能需要多表联合查询,也可能需要进行一些计算,这时两种方式的差别就体现出来了。
使用Class方式的话,由于单位是类,需要先获取实例,然后再处理并得到结果。而Hash方法并没有类这个中间层,直接读数据库并一行一行生成结果。这个Kata的要求就是比较这两种方法,分析利弊。
比较
在我看来,这两种方法恰好可以对应IT行业中的大公司和创业公司:大公司做事井井有条非常有序,小公司做事看似混乱但灵活多变。
Class方法的特点是抽象和隔离,具体的处理者无法直接接触到原始数据,类相当于数据和处理者中间的接口,可以提供数据初步处理、过滤以及屏蔽底层变化这些好处。但是反过来,受限于类本身的行为,处理者能做的事比较有限,做事方法也比较固定,很多时候为了达到目的需要绕远路。
Hash方法正相反,提供了极大的灵活度,处理者完全可以根据自己的需要来处理数据,但是反过来却无法保证隔离性,处理者往往要做许多额外的工作来处理数据。
方法没有好坏,关键看场景,言尽于此。