现在回过头来看项目中以前写的代码,发现有好多的controller文件的行数是非常多的,甚至有时候打开一个controller的时候会导致编辑器卡住或CPU使用率瞬间飙升,风扇声音都有些刺耳.
如果仔细阅读和分析这些代码就会发现,其实有好多代码是本不应该放在这里的,一般情况下这些代码是我们系统的业务逻辑,常常是一个action就像一个意大利面条一样顺滑,整个业务逻辑代码一撸到底,其实这些业务逻辑都可以拆分成单独的逻辑功能封装成一个函数,来供这里和其他地方调用,可是我们并没有这样做,这就导致有些比较独立的逻辑在各个地方被无数次的重复书写,所以我们的controller的代码量急剧飙升.
例如:
# status 代码表通过审核
if employee.archive and employee.archive.status==1
# some code
end
如上是一个非常简单的例子,如果放到controller中判断,那么每个需要这个判断的地方都需要写上面的一串代码,并且从程序的字面意思上还不能读懂这个判断到底是在判断什么,如果把上面的代码改为下面的我觉得就会好一些
def archive_valid?
archive && archive.status==1
end
if employee.archive_valid?
end
这只是一个非常简单的逻辑封装,如果我们的代码都像上面这样封装好的话,我想我们的controller中就不会有这么长的代码,以及这么多的数据库查询语句了吧(因为我们的查询语句会封装到我们的方法中了)
所以,我们在coding的时候,不能仅仅是为了要实现功能,而把代码像意大利面条一样一撸到底,我们要考虑逻辑的封装,要考虑函数封装的原子性,而不是把很多逻辑混合到一个函数中,只有这样我们的代码复用率才能提高,我们的controller才不会这么fat,我们的model才不会这么thin.