您将如何考虑用于Web应用程序(PHP)开发的最佳实践工作流工具?[关闭]


18

我真的希望有更多经验的人可以按照我的答案示例来编辑问题:

  • 使用版本控制
  • 测试驱动开发
  • 调试代码(适用于php的xdebug)
  • 使用UML图
  • 将OOP用于可维护,可重用的代码
  • 使用框架(例如Zend Framework for php)进行快速的应用程序开发

还有什么或我上面提到的阐述?

基本上,我正在组建一个开发人员团队(我自己是开发人员),并且我想就专业的程序员/设计师等应如何协同工作以及应该使用哪些标准/范例提出一些建议。

另外,如果有人在该主题上有任何书籍或链接,我也欢迎!

我确实找到了我想满足的条件,或者至少满足了一部分条件:

http://www.ibm.com/developerworks/websphere/library/techarticles/0306_perks/perks2.html

Answers:


9

使用版本控制

SVN很常见,但是Mercurial更帅,功能更强大,并且具有牢固的GUI支持。

测试驱动开发

好吧,如果您进行单元测试,那么您已经是赢家了。对于工具,这是一个选择问题。测试必须尽可能简单,这就是我放弃PHPUnit进行SimpleTest的原因。

调试代码

使用单元测试,您几乎不需要xdebug。我通常只将xdebug用于分析。(查看KCachegrind btw)

使用UML图

反映代码逻辑的所有内容的最大问题是保持同步需要大量人工工作。您可以自动执行某些任务,但这并不是那么有用,因为您通常想在拥有任何东西之前先使用uml。另一个问题是,图表工具比笔和纸或白板更难使用。如果您必须与多个开发人员交流问题,或者需要自己进行抽象,请使用uml。(“ dia”是一个很好的免费工具。思维导图工具也非常便于头脑风暴,有些实际上可以与笔和纸竞争。)

将OOP用于可维护,可重用的代码

好吧,oop在某种程度上可以解决问题。:)一个好的建议:组成>继承。继承是一见钟情的功能强大的工具,但是维护和松散的耦合会因此而遭受损失。第二个好的建议:维护>重用。抽象系统可能非常强大,但也很难维护。

使用框架(例如Zend Framework for php)进行快速的应用程序开发

RAD是让您的应用早日发布的好东西。但至少在可伸缩性方面,某些组件(尤其是ORM)会为您所用。这里的主要问题是您将域逻辑与对象配合使用,如果您需要纯可伸缩的数据库优化解决方案,这将变得很难排除。请注意这一点,并鼓励您的开发人员在没有高级抽象层的情况下使用数据库。数据库抽象是一个神话,orm是一个谎言。

新手通常想要运用所有这些最佳实践,建立编码标准,使用所有不错的工具链,无论如何。对于某些开发人员来说,它是可行的,但是如果事情太严格,某些开发人员将陷入精神障碍。单元测试和scm实际上是必须具备的,但是对单元测试陌生的人确实需要在爱它之前学习它的价值。不要过度使用,逐步应用实践,看看其效果如何。吻也归结为代码。有时,解决难题的最好方法就是解决问题。您需要六度分离算法吗?随机选择一些朋友。您可以使用错误的逻辑围绕它创建一个完整的应用程序。如果客户最终决定放弃它,那么每个人都会节省很多钱。

敏捷

了解敏捷方法论,极限编程,Scrum等。那里有很多书籍。任何书籍都可以使您的团队变得更好,但是最好让每个队友加入其中。


1
很棒的答案!谢谢。先生,您的+150代表!随意将其他内容添加到帖子中,该问题将显示在页面顶部。代码,注释和文档软件等中的@TODO之类的东西
Damien Roche 2010年

2
  • 版本控制:如果在Windows上,根据我的经验,TortoiseSVN是最好,最直观和最容易使用的。

  • 框架: CodeIgniter。掌握适用于PHP的最佳Web开发平台。

  • IDE: Netbeans是我在Windows上使用的最好的PHP IDE。

  • 单元测试:有几种选择,谷歌搜索会出现很多。CodeIgniter也有自己的单元测试器。

  • 调试器: Xdebug。

  • Javascript库: jQuery

  • FTP程序: FileZilla

  • 数据库管理: PhpMyAdmin

  • 线框图: Balsimus样机,或使用白板。

  • 杂项:如果在Windows上使用WAMP,则可以在一个软件包中轻松安装,启动,停止和重新启动apache,mysql和php。

另外,如果您打算在许多不同的网站上工作,并且这些网站中的大多数都将具有一些常用功能,例如注册,登录/注销,用于搜索用户的管理部分等,那么我建议在任何框架下构建一个小项目您选择,并将该项目作为启动的每个新项目的基础。通常我称这个项目为“骨架”。如果我要开始在xyz.com上工作,我将复制骨架目录并将其重命名为“ xyz.com”,填写一些配置文件,然后获得带有某些功能的xyz.com副本。已经工作了。


1
阅读这篇文章并看到我已经使用了一些推荐的项目之后,我决定尝试使用Netbeans IDE。谁能推荐任何值得用于PHP / Codeigniter开发的插件?另外,它可以与Wampserver一起很好地工作吗?
Gortron 2010年

1
@Gortron我将netbeans与codeigniter一起使用。有一个用于codeigniter / netbeans的自动完成工具:rhasan.com/blog/2009/09/codeigniter-auto-complete-with-netbeans PHP实际上是一种Unix语言,在Linux虚拟机上进行开发是个好主意。也要避免颠覆,它在2010年使用了分布式的东西(git,hg,bzr)。hginit.com
Keyo

Framework: CodeIgniter. Hands on the best web development platform for PHP.坦率地说,这是胡扯。如果您曾经使用过symfony,rails或django,将会看到一些主要问题。没有模块化目录结构,没有命令行界面。然后,您便拥有了诸如表单和模型之类的核心组件,这些组件占用了大量代码。如果您完全了解任何软件模式,您都会看到Codeigniter浪费了很多时间。至少要使用Kohana,这是CI在社区死亡后分叉并正确完成的。
Keyo 2010年

如果您使用的是Windows,我建议您使用SQLyog(具有社区版),而不是phpMyAdmin。我从未在Linux上找到像样的SQLyog替代品,真可惜...
Dean Harding 2010年

1
@keyo,谢谢您的链接。我已将自动完成工具添加到Netbeans,对于模型中具有很多功能的项目非常方便。我不认为我会从SVN转变,我只是一支由1人组成的军队,我认为目前不需要分布式系统。
Gortron

2

我主要同意Click Upvote的帖子,但是,如果您在一个相对较大的网站上工作,我绝对会建议将Symfony框架与Doctrine ORM结合使用。

如果您的项目定于明年到期,那我想花点时间投资Symfony2和Doctrine2。

另外,我不能太强调在基于UNIX的系统上进行开发的重要性,Ubuntu是我的偏爱,并且是一台出色的Web服务器。我主要在Windows上工作,但在运行于桌面(或工作时的服务器)上的VMWare虚拟机上的Ubuntu上进行开发。

对于IDE,我强烈建议使用NuSphere PHPEd或Storm PHP,但不幸的是,就像所有很棒的东西一样,它们不是免费的。


+1代表ORM。我花了无数小时在codeigniter中编写样板查询。
Keyo 2010年

在基于Linux的系统上,PHP更好。特别是如果您想使用基于C的插件(请记住libmemcached或ImageMagick)
Dean Harding 2010年

一些很棒的东西是免费的,那么Linux呢?
dan_waterworth 2010年

0

UML图的使用很好,但是完全是可选的。只要您的团队了解它们的含义,任何图都可以。尝试使用标准的没人真正了解可能会导致问题和浪费时间。

我建议从一个模型(http://balsamiq.com)开始每个页面,或者让您的设计师为您绘制页面。不要指望开发人员擅长视觉美学并无所不在地创建好的页面。

如果您有几名高级团队成员,请指派一名人来负责代码审查工作-让他们轮流进行审查(“ 审查委员会”


0

处理协作工作时,您需要:

•使用版本控制:我认为Git或Subversion会非常顺利

•测试驱动的开发:我开始学习这是必须的,但不要将其推向极限

•调试代码(用于PHP的xdebug):xdebug是我的选择

•使用UML图:当每个人都对OO编程和DesignPatterns有一定的了解时,这将很有帮助,尽管这始终是一个好习惯

•将OOP用于可维护,可重用的代码:灵活性,我认为这是OOP的关键方面。

•使用框架(例如php的Zend框架)进行快速的应用程序开发:我的建议是SYMFONY,第一个php框架(不是工具包)。它有一个很大的共同点,大量的文档,并且完全在php上实现。我已经使用了一年,它与OOP完全绑定

•您可能还需要一个系统来跟踪错误,功能请求等,例如:MantisTrack。这个系统非常容易和直接。它们还使您可以绑定颠覆,并将提交与人们发布的某些功能或错误相关联。

最后,至关重要的是,如果您要带领开发团队定期召开小型会议,以便每个人都可以在某一时刻了解系统的状态,也许您可​​以通过这种方式来计划或查看工作情况。

在我的公司中,我每天必须发送一封电子邮件,告知我所从事的工作以及是否存在任何并发症。

祝你好运!


0
  • 框架:codeigniter,毫无疑问。它具有您可能需要的所有功能,并且除非您确实需要它们,否则不强迫您使用其中的任何功能。
  • 版本控制,IDE:我的学校很老套,我认为我的回答对您没有帮助。
  • UML的Wireframing:在这方面也很老套,但实际上:白板赢了。它们灵活,可扩展,并支持您可能认为合适的任何约定;
  • 数据库管理:phpmyadmin;
  • 开发服务器的操作系统:我可能平淡无奇,但是:Ubuntu。在几秒钟内安装LAMP服务器;不要为添加新的库而慌张(可怕的imagick:一个命令完成了);如果您喜欢PHP,则可能最终会在生产环境中在Linux服务器上工作,因此最好开始练习。(免责声明:Ubuntu不是我最喜欢的发行版)。
  • 其他:grep在调试其他人的代码时非常有用(想知道有多少控制器使用给定的模型?完成!)。

编辑

我忘记了最重要的事情:规格。在触摸任何代码之前,为您的项目编写真实的规范。牢记所有用户交互图。这将节省您几个世纪。


0

版本控制 由于您在团队中工作,因此最好随身携带分布式的东西。您的候选人是Git和Mercurial。这意味着您的团队可以在不中断项目的情况下进行本地提交,但是仍然可以跟踪他们的工作,然后将这些提交推送到中央服务器。它也更快,合并冲突更少,因为代码是作为更改集而不是修订版进行跟踪的。仔细阅读hginit指南(由堆栈溢出的共同创始人撰写),您将对DVCS有了更多的了解。http://hginit.com/

您还应该使用存储库而不是rsync或ftp进行部署。

测试驱动的开发 根据您所做的测试,可能会浪费大量时间。我并不是说您应该完全跳过它,对于较小的项目,这是开销。如果要编写库或大型长期项目,请确保为其编写测试。这些测试将有助于维护阶段。请注意,TDD找不到所有错误。会有用户体验问题,布局问题,性能问题等。

基本上,调试 Xdebug是您的唯一选择。它与Netbeans集成良好。如果您需要打印出变量,则应使用日志文件。使用框架日志功能,这在生产中更加安全。

计划/图表 如果您使用的是好的框架,则无需过多地制作详细的图表。保持简单并在较短的发布周期内工作,这很容易过度计划。项目的要求和规格必定会发生变化,因此我不会花所有时间在它们上。请记住,代码是最详细级别的IS规范。

使用错误跟踪工具(见下文)将规范分解为可分配给团队成员的任务。使用中央工具来记录项目,错误跟踪器可能会有一个Wiki。

您可以使用Mysql Workbench之类的工具来设计图中的数据库模式,并将其导出为SQL。

框架和OOP 这可能是最重要的部分。为自己找到一个流行的框架,该框架将支持快速开发和代码重用。有些人不喜欢我这么说,但是框架应该决定您的工作方式。它应该提供结构,以便一个开发人员可以切换项目并确切知道某个页面的控制器在哪里,确切地知道模板变量是什么以及如何查询模型。有些框架在此处提供了太多的灵活性,您会发现开发人员并非总是以相同的方式使用该框架。我喜欢python哲学;应该有一种显而易见的方法来完成所有工作。这就是为什么我喜欢django和rails的原因,它们很自以为是,这意味着我可以看看别人的代码并了解它的作用。Symfony看起来是这里最好的选择,

像这样的堆栈溢出有很多“什么框架”问题:https : //stackoverflow.com/questions/2648/what-php-framework-would-you-choose-for-a-new-application-and-why

错误跟踪为 您的团队提供适合开发人员的良好的错误跟踪器。不要在简化的基础上使用某些东西,例如大本营。Redmine和Unfuddle是出色的错误跟踪器的两个示例,它们还可以跟踪时间并与您的存储库集成。您的团队应该使用此工具来交流问题,而不是使用电子邮件或IM。当存在可用的错误和文档历史记录时,它使新开发人员更容易。本文确切地解释了任何好的bug跟踪程序需要做什么以及为什么。http://www.joelonsoftware.com/articles/fog0000000029.html


0

我建议查看Bazaar以进行版本控制。与Git相比,它的主要优点是实际上易于在Windows,Mac OS和Linux上使用和安装。而且bzr命令与svn命令非常相似,因此以前使用Subversion的人可以很容易地使用Bazaar,而无需太多学习。我在看着你Git。

除此之外,我坚信不要对您的开发人员施加任何压力。那蜜蜂说让他们使用他们喜欢的IDE,操作系统等等。

除此之外,我强烈建议您对所有代码进行Wirte测试,无论这是多么乏味。

根据此处提出的建议,您无法决定是否支持框架恕我直言。我建议您根据它们的功能列出对您来说很有希望的那些,然后在其中的每一个中编写一个小型测试应用程序。(每次写一个。)

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.