大项目的文件管理

所谓的“大项目”,我这里真没有一个明确的概念。是文件数据达到具体多少个文件?还是业务逻辑模块达到多少个?还是项目的访问量达到多少PV?至今没有一个精确的数字来定义什么程序是“大项目”。这里姑且认为:业务功能模块众多(访问流量流量暂且不理)。纵使业务功能模块再多,就算一个application也可以容纳的下。对于业务模块众多的项目,文件管理解决方案如下:

1、使用子目录。经常业务模块相近的控制器文件可以统一使用controllers的子目录来管理。将这些Controller文件统一放在controllers的子目录中。这样相应的视图文件也会存在于视图目录(views)同一个子目录中。当然models目录也支持子目录的。

2、使用多个入口文件。首先声明,这个方法真的是不常用,或是在特殊情况下的解决方式。不过以往有很多的DoitPHP用户通过qq、邮件联系我,问及这种情况如何处置。如:DoitPHP项目下有博客程序(blog),有文章管理程序(cms),还有商城程序(b2b),还有其它程序。这种情况建议每个独立的项目各自使用各自的application目录。至多共用DoitPHP框架文件。目录结构如下:

- blog
 |- config
    |- application.php    
 |- controllers
 |- models
 |- views
 |- widgets
 |- library
 |- extensions
 |- index.php

- cms
 |- config
    |- application.php    
 |- controllers
 |- models
 |- views
 |- widgets
 |- library
 |- extensions
 |- index.php

- b2c
 |- config
    |- application.php    
 |- controllers
 |- models
 |- views
 |- widgets
 |- library
 |- extensions
 |- index.php

- doitphp
 |- core
 |- library
 |- views
 |- DoitPHP.php

每个项目的入口文件代码。

require_once APP_ROOT . '/../doitphp/DoitPHP.php';

$config = APP_ROOT . '/application/config/application.php';

Doit::run($config);

上面这种方案算是上上策了,如果非要将这些项目合在同一个application目录中,实在不是上上策,不过可以解决。目录结构如下:

- application
 |- config
    |- blog.php
    |- cms.php
    |- shop.php    
 |- controllers
    |- blog
    |- b2c        
 |- models
 |- views
 |- widgets
 |- library
 |- extensions
 |- index.php
 |- blog.php
 |- shop.php

- doitphp
 |- core
 |- library
 |- views
 |- DoitPHP.php

同一个application目录,使用不同的入口文件。如上面所示:index.php用于cms项目,blog.php用于blog项目,shop.php用于b2c项目。

入口文件代码格式如下:

require_once APP_ROOT . '/doitphp/DoitPHP.php';

$config = APP_ROOT . '/application/config/cms.php';

Doit::run($config);

三个入口文件内容,也仅$config(主配置文件)路径不同,这样每个入口文件都加载各自的主配置文件,主配置文件又可以设置具体的控制器目录、模型目录、视图目录等。不同项目的文件使用子目录(如:controllers的子目录),这样文件就便于管理了。尽管如此,还是不推荐这种方案。还是推崇最开始那种方案,多个项目浑在同一个application里,加大代码管理难度,尤其是当多人的开发团队,当对代码开发维护时,增加的管理难度就更明显了。

所以,运用之巧,存乎一心!学会使用DoitPHP框架不能算作高手,能够领悟其中内部原理,又能灵活地与自己所开发的业务需求相结合,才算高手。想要将DoitPHP框架使用的炉火纯青,除了要经过几个DoitPHP开发的项目实践之外,最好有时间阅读下它的源代码。知其然,还要知其所以然,这样我们众PHP程序员才有进步。