标签:http io os sp on 文件 数据 2014 问题
做了几年Windows环境下程序开发(大概200多个模块,几百万行代码),转做PHP Web开发后,发现模块级别的代码重用实在是不如意啊,重用基本上都是代码复制粘贴级别的,耦合度都太高,不利于代码打包和重复发布。比如文件上传,包含了前端页面部分的展现代码和服务端处理上传文件的代码,需要处理如下几个问题:
还有更多别的细节,单从这5个问题来看,已经不可避免地涉及到前端展现和后端数据库了,因此用Yii扩展(Extension)的方式,无法满足实际的要求(有不同意见的同学可以留言讨论)。因此需要更加完备的载体去实现这些功能,自然考虑用模块的形式去实现。具体方法如下:
目录结构如下图所示:
如此一来,这个模块就在一定程度上,可以独立发布了,其他Yii用户,只要把这个模块放到modules目录下,在配置文件里加上引用,就OK啦。
现实开发中,不会那么一帆风顺,总会有更多的需求进来。比如,有attach模块后,从安全方面考虑,需要确定用户是否已经登陆,以及用户的一些操作权限是否能进行文件上传操作,这个时候,势必要依赖于用户模块,关于模块依赖,Yii没有提供官方的解决方案,让大家自由发挥了。我的建议是,用声明式的解决方式,比如在模块文件里,加说明。更加强制的办法是加接口,强制调用的第三方实现。
通常一个应用建立的时候,会有前后台,通常做法是,整一个frontend目录和一个backend目录,区分前台和后台。但是用模块化方式开发后,为了保证模块尽可能的自描述,独立性特征,需要在模块内部区分前后台,建议的方式是分别建立两个,即前台FController和后台基础AController,其他模块内部的控制器,继承对应的控制器,这样就在模块内部,实现了前后台分离。简单小结下前后台分离所涉及的内容
跨模块调用不可避免会发生,好在Yii1.x 有个getModule方法,可以把模块初始化,并解决文件导入问题。美中不足的是,IDE的代码提示无法提示动态的模块调用,不过可以用PHPDoc方式解决,参加另一篇博文。Yii2,又增加了一个getInstance()方法,这次完美解决了代码自动提示问题,赞一个。
这样一来,目录结构会变成这样:
各个功能都各自尽量在模块内部解决问题。
标签:http io os sp on 文件 数据 2014 问题
原文地址:http://my.oschina.net/u/248080/blog/352147