9

在我的自由职业生涯中,我已经为中小型企业开发了几个 Web 应用程序,这些应用程序支持项目管理、预订/预订和电子邮件管理等内容。

我喜欢这项工作,但发现最终我的应用程序达到了维护的偷听率非常高的地步。我回顾我 6 个月前编写的代码,发现我必须花一些时间重新学习我最初的编码方式,然后才能进行修复或添加功能。我确实尝试练习使用框架(我之前使用过 Zend 框架,并且正在考虑将 Django 用于我的下一个项目)

您使用什么技术或策略来规划一个能够处理大量用户而不会破坏并且仍然保持代码足够干净以便易于维护的应用程序?如果有人有任何可以推荐的书籍或文章,那也将不胜感激。

4

6 回答 6

9

尽管肯定有关于该主题的好文章,但它们都不能替代现实世界的经验。

可维护性不是您可以直接计划的,除非是非常小的项目。这是您在整个项目期间需要注意的事情。事实上,提前创建大量的类和基础设施代码会产生比简单的意大利面条代码更难理解的代码。

所以我的建议是清理你现有的项目,不断地重构它们。看看那些很难改变的部分,争取更简单的解决方案,更容易理解和调整。如果代码甚至太糟糕,请考虑从头开始重写。

不要仅仅因为您阅读了更多文章或使用了新框架就开始新项目并期望它们成功。相反,识别现有项目的失败并解决其特定问题。每当您需要更改代码时,问问自己如何重组它以支持将来的类似更改。无论如何,这是您需要做的,因为将来会有类似的变化。

通过进行这些重构,您将偶然发现各种您可以提出并阅读相关文章的具体问题。这样,您将学到更多知识,而不仅仅是提出一般性问题和阅读有关维护和框架的一般性文章。

今天开始清理你的代码。不要将其推迟到您未来的项目中。


(文档也是如此。每个人的第一个文档都非常糟糕。几个月后,它们变得过于冗长并且充满了不重要的东西。因此,用解决您真正遇到的问题的解决方案来补充文档,因为接下来的机会很好一年你会遇到类似的问题。这些经验将比任何“如何写好”风格指南更能改善你的写作风格。)

于 2008-09-19T23:48:25.060 回答
4

老实说,我建议您查看 Martin Fowlers Patterns of Enterprise Application Architecture。它讨论了许多使您的应用程序更有条理和可维护性的方法。此外,我建议您使用单元测试来更好地理解您的代码。Kent Beck 关于测试驱动开发的书是学习如何通过单元测试解决代码更改的重要资源。

于 2008-09-19T23:18:17.007 回答
3

为了提高可维护性,您可以:

  • 如果您是唯一的开发人员,那么采用一种编码风格并坚持下去。这将使您以后在浏览自己的代码时对您可能做过的事情和绝对不会做的事情充满信心。对去哪里寻找、寻找什么和不寻找什么充满信心,这将为您节省大量时间。

  • 始终花时间更新文档。将任务纳入发展计划;将该时间作为任何更改或新功能的一部分包含在计划中。

  • 保持文档平衡:一些高级图表,有意义的评论。最好的注释说明无法从代码本身中读取。就像某些代码块背后的商业原因或“为什么”。

  • 在计划中包括努力保持代码结构、文件夹名称、命名空间、对象、变量和例程名称为最新并反映它们实际所做的事情。这将大大提高可维护性。总是把铁锹称为“铁锹”。避免使用大块代码,通过您选择的语言中可用的方式对其进行结构化,给块赋予有意义的名称。

  • 低耦合和高一致性。确保您了解实现这些目标的最新技术:按合同设计、依赖注入、方面、设计模式等。

  • 从任务管理的角度来看,您应该为非连续工作估计更多时间并收取更高的费率。不要犹豫,让客户意识到您需要额外的时间来进行随时间推移的小型非连续更改,而不是更大的连续项目和持续维护,因为管理和分析开销更大(您需要管理和分析每个更改,包括影响在现有系统上单独)。您的客户将获得的一项好处是系统的预期寿命更长。另一个是准确的文档,如果他们决定这样做,他们将保留寻求他人帮助的选择权。既保护客户投资,又是强大的卖点。

  • 如果您还没有这样做,请使用源代码控制

  • 详细记录为客户所做的一切以及任何重要的沟通(简单的计算机或纸质 CMS)。每次作业前刷新你的记忆。

  • 记录每个客户未解决的问题、想法和建议;在开始作业之前再次刷新你的记忆。

  • 提前计划如何进行实施后支持,与客户讨论。使您的系统易于维护。规划参数化、监控工具、内部健全性检查。作为初始合同的一部分,向客户出售实施后支持。

  • 通过招聘进行扩展,即使您只是需要某人来提供实施后的支持,也可以做一些管理工作。

推荐阅读:

于 2008-10-02T12:20:45.127 回答
2

在帮助将旧的 Web 应用程序发展为极高可用性、高需求的 Web 应用程序时,我能给出的最重要的建议是封装所有内容。- 尤其

  1. 使用良好的 MVC 原则和框架将视图层与业务逻辑和数据模型分开。
  2. 使用健壮的持久层不将业务逻辑与数据模型耦合
  3. 规划无状态和异步行为。

这是一篇关于 eBay 如何解决这些问题的优秀文章 http://www.infoq.com/articles/ebay-scalability-best-practices

于 2008-09-19T23:28:40.787 回答
1
  1. 使用框架/MVC 系统。您的代码越有组织和集中越好。

  2. 尝试使用内存缓存。PHP 有一个内置的扩展,它需要大约十分钟来设置,另外二十分钟可以放入您的应用程序。你可以缓存任何你想要的东西——我把我所有的数据库记录都缓存在里面——对于每个应用程序。它确实徘徊。

  3. 如果您还没有,我建议您使用源代码控制系统,例如 Subversion。

于 2008-12-24T00:34:08.767 回答
-4

您应该考虑使用 SharePoint。这是一个已经设计用于完成您所提到的所有功能的环境,并且具有您可能没有想到的许多其他功能(但也许您将来会需要:-))

是来自官方网站的一些信息。
您可以使用 2 种不同的 SharePoint 环境:Windows Sharepoint Services (WSS) 或 Microsoft Office Sharepoint Server (MOSS)。WSS 是免费的,并且随 Windows Server 2003 一起提供,而 MOSS 不是免费的,但具有更多的功能,几乎涵盖了您企业的所有需求。

于 2008-09-19T23:11:36.913 回答