计划重写大型PHP项目的提示?


13

我决定完全重写多年来一直在研究和开发的PHP框架(使用MVC)。到目前为止,我的问题是我只想出一些主意,将它们作为票证放入Trac中,然后在以后添加它们-而不必担心框架本身的设计。随着时间的推移,这会导致一些问题,我认为重写会有所帮助,但是我不确定从哪里开始进行规划-我知道我不想使用Trac,而且我知道不仅需要机票和里程碑-但是我还需要什么?

我真的很想彻底计划这个重写,我想详细说明我想要的每个功能,它将去向何处以及如何将其连接到其他任何部分-但是我对此级别的规划没有经验。有什么建议吗?有什么程序可以帮上忙吗?我对Trac感到厌倦,我从未真正喜欢过它。

我知道我需要一份设计文档,但是我应该遵循某些布局吗?我还将需要错误跟踪,票证,里程碑等,但是除了Trac之外,我也不知道这有什么用。我确定还有更多需要,但我不知道要做什么,因此我们将不胜感激。


你为什么要重写它?为什么不在需要改进的地方重构它呢?当您从头开始重写某些内容时,很可能会消除新问题中的旧问题。

@Gordon也许写得如此可怕,以至于重写它比重构更好。
右对齐

重写总是比看起来难,而且我已经学会了难。哦,好了,这一次我知道我在做什么,所以它需要的时间是原来的一半(然后它会花比原来更长的时间,因为您过度设计以试图纠正或
避免

Answers:


7

下面看我在开发大型项目时要做的一些事情:

1-我使用了像OpenProj这样的计划工具,并添加了要包含在任务中的所有功能。例如,现在我正在开发一项功能,允许用户在我的网站中注册后自动登录。我的计划中有一项任务,例如“功能自动登录”。

2-我是一个单人开发商店,因此通常我会从一个功能转移到另一个功能。我的计划是以所有功能都是连续的方式创建的。我不会花费太多时间来估计每个功能需要多少时间。我通常认为每个人都会花我一天的时间发展。如果要花更多的钱,我只需更新计划,所有未来的任务都会相应地移动。

3-我广泛使用git。每个功能都是一个分支。完成每项功能后,将其合并回到开发分支,并为下一个功能创建一个新分支。

4-如果在软件中发现错误,则会创建一个小git分支来修复它,并在解决后将其合并回去。我确保同时更新了开发分支和当前正在使用的功能分支。顺便说一下,该错误已成为我的OpenProj计划中的另一个任务。像“错误的错误地址”之类的东西。当我插入它时,所有其他功能都会在时间轴中移回。

5-在开发过程中,如果我考虑一个新功能,我只是将其包含在计划中,以使其最适合并重新调整时间表。

我希望这有帮助。听起来您前面有一个激动人心的项目。祝好运!


10

如果要进行完全重写,为什么不考虑是否应该完全使用php?技术的更改/升级可能是您想要改善设计/可扩展性/可维护性等的催化剂。


3
另外,考虑到现有框架可能比创建另一个一次性框架更适合。
S.Lott

1
@ S.Lott-如果创建单一用途的框架是为了更好地满足单一用途而设计的,那怎么了?
匿名

1
@克里斯·布里奇特(Chris Bridgett):世界可能不需要另一个高度专业化的框架。这可能是“有吸引力的麻烦”。浪费时间。通常,现有框架也可以完成任务。特殊用途框架中的“定制”通常是由于无法理解已建立的现有框架。通常,现有框架更安全,更可靠,更快。通常,现有框架已被调试。通常,其他团队成员会更好地理解现有框架。
S.Lott

@ S.Lott:我正在为我拥有的多个站点编写此代码,并且其设计是通过其他框架没有的设置来进行的。我也不打算暂时释放它,如果有的话。回复:TheLQ:那是我的第一个想法,但是除.NET之外,没有其他Web语言可以像PHP那样实现。Python是首选,但是要在cPanel服务器上安装它(令人遗憾的是,在许多Web托管世界中构成)是一件很痛苦的事情。
乔恩

1
@ S.Lott自发布以来,我一直在阅读Symfony,CakePHP和CodeIgniter,而阻止我使用它们的第一件事-似乎都是盲目地坚持MVC,而忽略了可重用性。我目前(如果将来要重写的话)的设计是将MVC放在一个文件夹(“模块”文件夹)中,但该视图中有用户想要的视图(命名为example.module.view.php)以及一个主题。文件夹,设计人员可以在其中创建自己的主题,以覆盖现有视图。这对我来说至关重要,而且没有一个主要的框架在没有大量黑客攻击的情况下无法做到这一点-这让我感到困扰。
乔恩

10

我建议改为大量重构

您在这里预期的问题:

我真的很想彻底计划这个重写,我想详细说明我想要的每个功能,它将去向何处以及如何将其连接到其他任何部分-但是我对此级别的规划没有经验。有什么建议吗?有什么程序可以帮上忙吗?我对Trac感到厌倦,我从未真正喜欢过它。

是一个真正的艰难。基本上它是所有丑陋的瀑布模型。这是一些有关“大重写”方法存在问题的奇闻趣事的证据,得出的结论是:您可能无法正确预料到这些问题,并最终导致想要从头开始重写的另一堆麻烦。不是因为你很糟糕,而是因为不可能一口气拿到大东西。

当您开始重构时,可以编写单个票证,然后可以继续使用该项目。这里的技巧是识别出较小的更改,以使整体设计更好。

例如:您提到,您没有MVC,但是想要。第一步,您可以获取一个PHP文件,并假设进行常规混合,然后对其进行排序,以便在顶部具有所有的db-access,计算等功能,在底部具有“模板”(首张票,每个文件)。第二步,您可以将所有这些模板部分封装到函数中,以传递其参数。(更多票)。做完了吗 恭喜,您在MVC中完成了V。


我会考虑到这一点,谢谢。也只是为了清除问题-我现在正在使用MVC。
乔恩

@Jon:是的,我的示例还假设一个典型的页面,没有框架。但是我认为,比照做了,我的回答并没有因此而无效。我没有提到的一点是:重构很有趣。看到总的废话变成美丽的东西是非常有益的:)
keppla 2011年

3

考虑使用现有框架。CakePHP,Zend Framework,CodeIgniter和Symfony是PHP的已知名称。如果他们满足成百上千个用户的需求,我相信他们可以满足您的需求。

如果您愿意学习/使用PHP以外的东西-Django(Python)和Rails(Ruby)几乎是常规Web应用程序的领先框架。

当然,除非您想要创建框架的经验,否则,我可能会补充说,这在市场上的价值要小得多(而不是知道如何很好地使用现有的,受支持的框架)。


1

我喜欢使用Redmine作为时间表跟踪器。IT可以很好地处理所有这些项目,并且比起trac,它对用户更友好(在我看来)。

关于您的重写,重要的是要首先了解您永远不会想到可能出现的所有功能/新扩展,因此请尝试尽可能灵活地编写应用程序。使用PHP拥有的许多MVC框架可以帮助利用这一点。但是,如果您的数据库体系结构从一开始就不灵活(Cake),那么其中的一些框架也会给您带来麻烦。我会真正专注于使事情尽可能抽象,并且每当您看到硬编码的东西时,都要问问自己它的用途以及为什么不能将其存储在数据库中。

真正的数据库设计可以帮助回答许多问题,这是我看到应用程序如何交互的最重要的地方。因此,我建议您花费大量时间分析数据的存储方式以及数据库的结构。


1

作为一个问题跟踪软件,JIRA很棒,但是非常昂贵。我使用的另一个好工具是Eventum。免费。

但是最重​​要的部分是对所需的东西有个好主意。首先,您必须收集应用程序的需求,对所需的内容有一个总体的感觉,并尽可能完整。

基于此,您将创建软件需求,这是一种更具技术性的方法,其中您将描述将成为应用程序一部分的模块,它们的功能和子功能,对象,类,它们的接口,以及几乎所有内容。

据了解,您将对应用程序的复杂性和所需的代码行有很好的了解,因此您可以进行估算并创建时间表。有一个时间表和截止日期很重要,否则您可能永远都无法完成它。

希望能帮助到你


Jira对于不到10位用户来说是非常便宜的。费用是10美元,10美元将捐给慈善机构。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.