2011-03-28 83 views
7

我使用子模块的git,我很难弄清楚如何组织我的文件。我在PHP中开发,并使用单元测试。所以现在,我用这个组织为每个模块:使用git和submodule,什么是好的文件夹结构?

  • 的src/
  • 测试/

这似乎是一个绝妙的主意,但问题是,当我做了“混帐子模块添加“到一个项目中,我会有这样的路径: project/modules/News/src/index.php

src /文件夹确实存在问题。

我是否应该简单地将我的所有文件放在模块根目录下,并在源文件中混合使用测试/文件夹?对我来说听起来很糟糕。你在做什么 ?

编辑:由于自动载入,src/Folder存在问题。我不应该把“src”放在我所有的班级名称中......

+0

关于编辑的问题:问题是您希望类名匹配到文件夹结构。 Ofc每个模块也应该有它自己的测试,这是一个问题,因为你不能包括(如BarModule/src => module/Bar)与git子模块? (只是检查我得到您的要求权利) – edorian 2011-03-29 16:28:01

回答

4

只要自动加载器能够以某种方式找到您的文件,您的文件夹布局大多无关紧要。如果您使用PEAR约定将类名称映射到它们的源文件,则可以将src目录添加到包含路径或堆叠第二个自动装载器。然后你不必添加src到类名。

PEAR约定的替代方法是使用文件和类之间的静态映射。有a tool that can automatically generate such an autoloader for you at GitHub

静态自动装载机方法也用于PHP Project Wizard。该工具将创建src和测试文件夹,其中包括your phpunit configbuild file to connect your project with Jenkins CI。这是一个方便的软件包。

至于包含子模块,请考虑将它们放入lib或ext文件夹中。在phpdox project at GitHub中可找到这种外观的一个例子。确保你也看看main bootstrap file,看看如何包含各种自动加载器。

+0

你是对的,除了我可以在一个项目中拥有30多个模块。所以我要堆叠30多台自动加载器,这不是很糟糕吗?我已经知道(和合作)到phpdox项目;)但这不是同一种子模块。在我的情况下,子模块更像是一个wordpress插件。此项目必须是PHP 5.2 :( – FMaz008 2011-03-29 13:03:47

+0

@ FMaz008为什么不使用TheSeer的PHPAB并让它遍历整个项目,包括你的30个子模块,然后使用那个单一的自动加载器呢?IIRC PHPAB也有一个5.2的模板,所以版本不应该是一个问题。 – Gordon 2011-03-31 14:42:40

3

我在面对这个问题时所做的是创建一个名为vendors的文件夹,并将所有子模块放入该文件夹中。然后我使用相对路径将这些目录链接到我的代码中我想要的位置。你可以将符号链接提交给git,并且当其他人拉动版本库时他们仍然可以工作。当然,这只适用于使用基于* nix的操作系统的情况。

例如:

modules/ 
vendor/module1/src/ 

能像这样(从modules目录)被符号链接:

ln -s ../vendor/module1/src module1 

不知道这样能否解决您的问题或没有。

+0

但如果一些开发人员使用Windows?符号链接不可用... – FMaz008 2011-03-28 16:08:56

+0

某些版本的Windows有类似符号链接的东西,你可以试试它们。我不在Windows上开发,所以我从未尝试过。 – MitMaro 2011-03-28 16:29:19

0

我不会在单独的模块中进行测试。将其保存在同一个存储库中。

+1

我从来没有计划将我的测试放在不同的存储库中。所有模块都与他们自己的测试捆绑在一起。 – FMaz008 2011-03-29 12:54:48