【问题标题】:Moving a system from sort of a class system to an MVC format将系统从某种类系统迁移到 MVC 格式
【发布时间】:2009-01-28 09:54:47
【问题描述】:

我正在开发一个相当大的系统,该系统由另一个不再在这里工作的程序员开发。

因为我是狂躁的连环杀手,维护它并且知道他住在哪里。

除了有趣的事情,这个系统有点像一个类系统开发,有点不是,我已经设置了一个开发者版本,可以很快地部署新版本。

  1. 您对部分迁移到新模型有什么建议吗(我无法完全转换,只是没有时间)
  2. 您是否推荐任何我可以保留在系统中的类名(不会看起来像 hack),但不会与当前类名(用户、数据、日志记录等)冲突

谢谢。

【问题讨论】:

    标签: php model-view-controller data-structures transitions


    【解决方案1】:

    提示 #0) 现有代码真的很糟糕,还是不符合您的个人喜好?如果是前者,请继续阅读此列表。如果是后者,请深呼吸几次,至少花一两个月时间了解情况,然后再决定是否需要重新做。

    提示 #1) 编码时,如果发现有问题,请修复它。这将花费更长的时间,但随着系统变得更加“固定”,它最终会给您带来生产力提升。如果您真的没有时间修复它,请帮自己一个忙并添加如下评论: //TODO: rejig thing so it does x 稍后,当您有时间时,只需在您的代码中搜索“TODO:”即可获取您需要做的事情的清单。你也可以给他们一些等级,比如“TODO-High”、“TODO-Medium”、“TODO-Low”。如果您使用 Eclipse 或 Zend Studio for Eclipse 作为您的编辑器/IDE,您可以在 Preferences->Tasks 中将其设置为自动查找和标记这些内容。

    提示 #2) 如果您希望(最终)转换到 MVC,那么要做的一件重要事情就是将 HTML 与逻辑分开。这意味着使用模板。此任务可能需要很长时间,但一旦完成,您的其余过渡会容易得多。

    提示 #3) 尝试建立约定。 示例:控制器和视图名称必须与 URL 对应,并且位于与 URL 对应的目录中。 编辑地点 1234 的 URL:/places/edit/1234 控制器文件:/htdocs/sitename/controllers/placesController.php 模板文件:/htdocs/sitename/views/places/edit.tpl

    提示 #4) 阅读主要框架的“入门”教程:Zend、CakePHP、CodeIgniter/Kohana、Symfony。看看一个在你看来是否比另一个更好。问问自己为什么喜欢它。它对您有用吗,还是您需要推出自己的框架(值得怀疑)。如果可能,请使用现有框架。它已经过数百或数千人的错误测试,您可以节省时间!我自己喜欢 Zend Framework,它特别适合像你这样的“过渡项目”,因为你可以一次接受或留下它。我的意思是,你可以选择只使用 Zend 的 View 对象,或者只使用它的 DbTable 对象。您可以随意省略它。这意味着您可以按照自己的节奏逐渐过渡到 Zend 世界。 EZ-Components 的工作方式相同。

    提示 #5) 通过扩展它们来包装你使用的类。例如,我使用 Zend_Acl,但实际上使用的是我自己的扩展 Zend_Acl 的 Acl 类。这有两个关键含义: a) 我可以在不更改代码的情况下将 Zend_Acl 换成其他东西,因为它都指的是普通的旧 'Acl' b) 我可以修改 Zend_Acl 的工作方式以满足我的特定需求,因为我可以在我的“Acl”类中覆盖我喜欢的任何方法。

    提示 #6) 尝试获得管理层的支持。向他们解释重构实际上会为他们省钱,因为它会提高代码的一致性和可理解性,这有助于减少缺陷的数量,并使它们更容易被发现和修复。

    提示 #7)尝试阅读有关该主题的书籍,例如 Martin Fowler 的“重构:改进现有代码的设计”

    【讨论】:

      【解决方案2】:

      zend 有很好的命名约定: http://framework.zend.com/manual/en/coding-standard.naming-conventions.html

      他们为所有的类添加了 Zend_ 前缀,这就是他们避免与第三方类冲突的方式。

      在我看来,每个大型项目都应该实现类似的命名约定,至少对于核心类。

      【讨论】:

      • 最新的 bata 版本的 PHP 有一个简单的命名空间实现。您可能希望在项目规划中考虑这一点,因为不再需要前缀。命名空间是一个更“干净”的实现。
      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 2011-11-02
      • 2015-04-25
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2015-08-01
      相关资源
      最近更新 更多