重构某个功能块时的一些思考

最近接到一个新需求,时间还算充裕,就打算将涉及到的这个功能块的代码进行一次重构,以应对接下来不断的修改。重构的目标主要是:

  1. 抽象模型

  2. 方法原子化

抽象模型意味着我需要分析出当前功能涉及到哪些对象,要写多少个class等等;方法原子化意味着我要把每一个小功能点都拆到很细,剩下的就是如何拼装,以及控制器如何控制流程的问题

重构前的代码基本上没有尊重MVC模式进行,实际上C变成了BLL,M仅仅是DAO,而且没有进行方法细分,很多都是一堆代码堆积在一起的超长方法,说白了就是一个披着OO外衣的过程式。。。想要在这样的代码上进行UnitTest是基本不可能的。

所以方法原子化就显得特别重要,将计算、入库、日志、流程等等分开,这样项目就会成为一个可测试的项目,其实说白了,程序无非就是使用算法对数据进行计算,然后返回结果。我们一般测试的也是计算的过程,输入一个值,用正确结果和计算结果对比。

在重构过程中,原先的模型类被我一分为四,各司其职;然后精简控制器,控制器只负责流程,不做具体计算。

在开发过程中,通过和群里的朋友们聊天,总结了下MVC,打个比方: C是项目经理、M是后端工程师、V是前端工程师 C只负责流程和任务分发、M只负责完成任务(计算)、V负责展示 C是面向业务的,M是面向数据的,V是面向页面的。

控制器一般只负责接收用户输入,并且根据业务流程调用不同的M来完成任务,最后接收M计算完的结果给V,V负责展示给用户。

对于PHP来说传统的MVC框架里模型一般只是负责数据的入库和查询,这是不够的,我们应该更加细分M,让其符合我们的业务需求,而不仅仅着眼于数据库操作。

大致上思考了这么多,就写到这里了,特别细致的东西没办法写出来毕竟是公司项目。

Published: April 28 2012

blog comments powered by Disqus