![]() |
1
56
|
![]() |
2
30
我做到了。我同情你。如果您的护照不是最新的,或者由于某些其他原因,您无法避免这样做,下面是我将如何处理它:
之后,我会从数据库开始。确保所有内容都相对规范化,列都有明确的名称,等等。 接下来执行PHP代码。如果代码真的是那么多的拼凑,我会继续并适合它的框架。观察 CakePHP 或 Symfony -他们用Rails的方式分离关注点,这就产生了一个问题:“这段代码应该放在哪里?”很容易回答。这不是一个小任务,但一旦你做到了,你可能比拥有一个构造合理的应用程序的一半要好。此外,一个好的Web框架的内置测试设施使得重构变得更容易——在改变之前,编写一个测试来覆盖现有的功能,并且您将知道在更改之后是否有任何损坏。 一旦对数据库进行了排序,并在模型中包含了模型代码,在控制器中包含了控制器代码,那么您就可以担心表示层的问题,比如在单个JS/AJAX库中进行标准化,清理CSS等等。 至于开发环境:您绝对应该设置一个本地开发环境。有一些WAMP包,或者你可以安装到Linux box/VM(我建议 VirtualBox 至于调试/分析工具,我知道Symfony提供了一组非常灵活的工具,包括一个JS小工具栏,它出现在您的页面上(仅在调试模式下),其中包含日志和分析信息。
|
![]() |
3
17
好吧,第一件事。我一直处于你所处的状况,这很糟糕。我认为您希望启动并运行一个开发环境是正确的。 开发环境
为了一个 LAMP 堆栈安装程序 ,我建议您使用以下方法之一:
灯组上的进一步读数: PHP集成开发环境 Article on IBM's Developer site 比较几个IDE 为了 源代码管理 ,您可以使用TeamFoundationServer、SVN或Git——只需使用一些您知道的东西。我建议你先把所有的东西都放在源代码管理中(对于任何你可能需要的紧急维护),然后计划进行一次大的检修。 检修您提到,您甚至不知道要使用哪些文件,而且它们使用文件命名约定作为伪版本控制。在开发环境启动并运行之后,您可能希望开始在那里进行彻底检查。有几件事可以帮助你:
你的客户/用户很重要 ,因为听起来你是项目的新手,他们会知道应用程序应该如何表现得比你更好(很可能)。 仔细记笔记很重要 ,因为您将从头开始重新编写任何需求/设计/最终用户文档。如果你要这么做的话,你需要了解它的内部结构。如果你想了解这个系统的任何信息,你需要自己写下来(或者你现在正在阅读预先制作好的文档,而不是读取堆栈溢出);-) 最后, 因为你需要修理东西,而你不能修理那些你不知道已经坏掉的东西。日志框架使您可以看到应用程序中没有任何明显UI的部分。将它插入应用程序的各个部分,然后查看日志,可以很好地了解代码何时执行以及以何种顺序执行。 你需要专注于捕捉(纸上的)应用程序应该如何工作,然后慢慢删除不必要的文件,同时尽量不破坏任何东西。注意日志以帮助调试。确保你的顾客没有尖叫什么东西坏了。确保你的笔记与记录的内容和你的客户所说的一致。 重新检查一切回到源代码管理 . 希望到目前为止,您已经得到了一个更新的、更理智的、更好的目录结构。 . 即使这仅仅意味着在每个部署之后都有一个基本的单元测试框架并进行一些基本的冒烟测试,但总比什么都没有要好。理想情况下,您应该有一个测试工程师或一个知识渊博、值得信赖的客户,他们可以在每次部署后花时间进行测试。 部署流程到位 如果你有一个以上的开发人员。控制对生产环境的更改应该是您的首要任务。(你最不想做的就是再经历一遍,对吧?)您应该有一个在环境边界之间移动的清晰而简单的过程(例如Dev->Test-then Test->Production)。 |
![]() |
4
16
您还可以使用PHP解析器帮助您进行清理。下面是一个示例脚本,用于打印已声明的函数和函数调用:
|
![]() |
5
10
|
![]() |
6
10
我给了它三个尝试重构方法的开始。就像骑摩托车爬山一样,每次都能跑10%的路程。所以我采取了另一种方法,结果效果好多了。
我这样做了整整三天,然后做了笔记,与利益相关者进行了长时间的交谈。 在对一些第一步达成一致后,我使用良好的一致性设计和抽象,正确地重新实现了所有的html UI。滚了以后,我一天可以做几次屏幕。
结果证明,这是艰苦工作的结束(也是利益相关者感知到的项目风险的结束) 结果发现,第一批工作人员被自己的意大利面条绑得太紧了,实际上工作内容相对较少,所以复制的范围比所有人怀疑的要小。
|
![]() |
7
7
您可以考虑的一件事是在开发环境中安装PHP“xdebug”扩展,将其设置为跟踪所有函数调用,然后尽可能完整地(可能通过自动化UI测试)运行整个应用程序。然后,您将能够分析/解析xdebug跟踪文件,以找到应用程序使用的所有文件/函数。 |
![]() |
8
6
这方面的其他人有很好的建议。我也遇到过这种情况。也许每个人在他们的职业生涯中都会有一次走进一个看起来像是被龙卷风袭击的项目。 我要补充的一个建议是,在你做任何其他人描述的清理工作之前,你需要得到管理层的认可。
当然,你需要继续与当前的混乱工作,因为它是一个现场网站。管理实时站点是首要任务,因此清理工作必须是后台任务。那就意味着要花更长的时间。我清理一个中等规模项目作为背景任务的经验通常需要6到12个月。由于网站将在这段时间内继续发展,您完成的一些清理任务可能需要修改或重新完成。确保你的经理也理解这一切。 如果经理对你清理这一烂摊子的计划犹豫不决,或者不重视清理,那么至少你会知道为什么所有其他开发人员都离开了这家公司! 关于如何进行,我有一些具体的建议:
|
![]() |
9
5
我会:
我知道我们不能一次只做一件事,但是,你可以把你的工作限制在一次解决一个问题,同时处理日常工作。 |
![]() |
10
5
通过将此项放在页面底部,可以看到所有包含/必需文件的列表:
|
![]() |
11
4
考虑重新编写并使用旧站点作为功能规范提到 据我所见,这是另一种选择: 放弃代码,将站点本身的功能作为新的功能集规范使用 (也就是说,这个项目的第一个)然后根据这些特性,用一个已经建立的框架(比如Symfony、Laravel或Drupal)重新构建站点。 是的,有些人会因为邪恶的话语而畏缩不前 重写 ... 但是在那里 当这实际上是一个更好的方法时,你暗示了一些原因:
当然,在这个位置上的每个人以前都必须使用这样的代码,但是有时候足够了,最好是扔掉意大利面,从一个新盘子开始。 如果你读 Joel's article 关于为什么重写不好,你会发现他引用的情况几乎都不适用于你。 |
![]() |
12
3
|
![]() |
13
2
我要做的第一件事是使用某种虚拟机建立一个测试环境。VirtualBox或Virtual PC都是不错的选择。这样你就可以开始改变事情,而不用担心破坏生产环境。不管这看起来需要多少工作(使用数据库和web服务器以及其他一切),最终还是值得的。其中一个巨大的好处是,如果您发现需要帮助,可以复制VM并将其交给其他人。 |
![]() |
14
2
你肯定需要一个开发环境。如果你不想在windows上运行这个站点,你可以获取一些Linux发行版的VMWare映像。 |
![]() |
15
2
如有必要,若要找出是否使用了某些类,则可以将get_声明的类与get_定义的变量和gettype结合使用,以查看正在实例化哪些类型。 至于第4和第5期,这些问题可能有点难解决,但这应该让你有希望开始。 |
![]() |
16
2
我想你所有的5点都符合我继承的一些经典的ASP项目,还有一个PHP项目。。。 我完全同意其他人关于尽快在源代码管理中使用它并在测试环境中使用VMWare、VirtualBox等的观点。
至于如何使用数据库方面的内容,我建议您看看 ApexSQL Clean . 我在一个有几百个ASP文件、200多个表和大约400个存储过程的项目中使用了这个。我能够识别出20个左右未使用的表和大约25%的存储过程。使用ApexSQL Clean,您可以将所有php文件以及表、视图和存储过程添加到依赖项检查中。抓紧30天的试用期看看吧,这会节省你很多时间。 对于网站上使用的文件,我有上个月的web服务器日志,并对它们进行搜索,查找我不确定的内容。我也很喜欢Aistina在访问文件时修改其日志的建议的变体。可能让它转到您设置的数据库中的一个表,即文件名和访问计数,并且每次加载该文件时,它都会增加该计数。过一段时间后,你可以查看计数并确定可以进行的操作。 |
![]() |
17
2
以下是一些想法:
|
![]() |
18
2
这真是一团糟。但是,开始有创意的去哪里切断这东西的一些触角:
|
![]() |
19
2
不想重复别人说过的话:
为了使结构更有意义,你必须在它旁边创建一个新的结构。新的DB处理程序通常是一个很好的开始,它包含在每个页面都应该加载的通用include文件中。这里的目标是创建一个最小的include结构,以后可以展开它,而不需要告诉每个页面加载其他文件。 现在您需要开始将功能移到新的include文件。您需要一种同时打开多个文件的方法,例如多文件编辑器、screen+vi(或emacs)。从在不同地方重复的实用程序函数和代码块开始。尽量不要分散注意力,马上去修理很多东西。随着其他问题得到解决,某些类型的问题将不得不转移位置。你稍后再来找他们。 不需要添加第三方框架。添加这样的内容会很快导致完全重写。在这一点上,这将是一个完整的工作,而不仅仅是驯服它的包括结构。所以先解决这个问题。 当您移动功能时,需要让文件使用新的包含文件。为您执行此操作的前几个文件将在一段时间内跟踪冲突。这会让人感到沮丧和毫无意义,但这可能是最困难的部分。几份文件之后,事情会变得容易些。有时您可以将六个页面迁移到新的include文件中,方法是将一打include替换为一个。该操作的另一面是,将有文件您可以删除。 如果你坚持这样做,你最终会发现所有的include文件都是你写过的,你会看到整个include布局。到那时,进行更具侵略性的更改(比如加入第三方框架)将变得容易得多。 |
![]() |
20
2
然后。。。
一旦你走到了这一步,你就可以开始一个适当的重构或者重构到类中。 好机会! |
![]() |
21
2
以下是对我帮助最大的事情:
|
![]() |
22
1
只是 我自己也经历过。 如果你真的想解决这个问题,你需要朋友。 在你建议如何改变他们几个月(几年)来一直在做的事情之前,你需要你的同事的尊重. 首先,尽快将代码置于版本控制之下。如果这对你来说不是件容易的事,至少要开始每天备份,即使这意味着只需压缩文件并用日期命名zip文件。如果没有人知道版本控制,那就在CVS或SVN上买一本实用的程序员手册,自己设置。这些书一天就能看完,而且你可以很快地起床跑步。如果没有人想使用版本控制,你可以自己使用它。。。然后当某人丢失一个文件时,你可以用回购协议的副本来保存这一天。其他人迟早会看到版本控制的智慧。
第三,当你浏览代码时,要做大量的笔记。写下所有困扰你的代码。把你的想法写在纸上。你可以在第一个月后再组织。 第四,安装一个代码分析器(比如xdebug)。这将告诉您在每个页面上调用了哪些文件和函数,以及每段代码运行需要多长时间。您可以使用它来找出includes问题,并找到慢的代码位。先优化这些。
尽可能多地修订本文件。 我再强调也不为过。 确保你的听众知道你这样做是为了公司的利益,而不仅仅是为了你的个人喜好。 亲自把它交给你的老板。 安排时间讨论。 他们可能会因为你写了它而解雇你。如果他们这样做了,你最好没有他们,因为他们不想改善,你的职业生涯将停滞不前。
很可能他们会想实现你的一些建议,这比什么都不做要好。至少,这有助于缓解你的担忧。 至于测试,在Apache中设置另一个“虚拟主机”(Windows&Linux都支持)。虚拟主机允许您在一台服务器上运行多个站点。大多数大型站点至少有3个虚拟主机(或实际服务器):dev.domain.com(用于日常开发)、staging.domain.com(用于QA人员在发布之前进行测试)和www.domain.com(您的生产服务器)。您还应该使用不同的登录密码设置数据库的开发、登台和生产版本,以免意外混淆它们。
祝你好运! |
![]() |
23
1
|
|
24
1
|
![]() |
25
0
试着在网站上得到详细的统计信息,找出入口和出口点在哪里。这是一个很好的方法,可以找出哪些文件被点击到最上面(然后查看这些文件,看看哪些文件被删除了)。 |
![]() |
26
0
照哈珀·谢尔比说的做。。。 但是,我还要补充一点,如果你没有得到管理层的支持来清理这个问题,你可能会接受这样一个事实:这可能是有原因的。... 只是说。;-) |
![]() |
27
0
除了其他人说的好东西之外,为了第一次了解哪些文件正在被积极使用,您可以在您的开发服务器(甚至是生产服务器,这不会破坏任何东西)上安装APC或eaccelerator之类的操作码缓存。然后,单击dev服务器上的web应用(或让用户在生产服务器上执行)。 现在查看缓存管理页中缓存文件的列表。如果一个文件没有被你的操作码缓存列出,很有可能它没有被任何东西加载。 这并不是一个完整的解决方案,但是如果每个目录都有10个index.php文件(例如index.php、index2.php等),那么至少你会知道你的应用程序正在使用哪一个。 |
![]() |
Karlo · PHP Sqlite PDO最新版本 4 月前 |
![]() |
Malte · 检查远程服务器上是否存在文件(使用PHP)[关闭] 4 月前 |
![]() |
Bard.Mus · 迁移后的数据库字符集环境 5 月前 |