2

我觉得有必要将基于 CF5 的旧代码重构为 CFC。我们已经在 ColdSpring 和 Transfer 中有一些代码,但感觉对 ColdSpring 和 Transfer 进行大量重写是没有意义的。

我会遇到什么技巧、方法和陷阱。

我怎样才能让这变得容易?

我不介意将 ColdSpring 加入其中,但 Transfer 是我对项目规模感到害怕的一点。

编辑:我的代码库已经使用了 7-8 年并且非常庞大。描述它会很困难,但是我正在寻找关于方法的通用建议

4

6 回答 6

4

如果它基本上可以工作,仅仅为了它而改变整个代码库会给你的系统带来很多潜在的错误。我不认为有一个简单的方法可以做到这一点。

如果您查看您网站的区域,即 1:最有可能改变和 2:执行最多,您可能能够定位一些可以从改变中受益的区域,并了解它们在基于 CFC 的框架中的适应程度,以及有什么好处。但是对于大多数代码来说,如果它工作正常,则可能没有迫切需要更改。

但是,当您需要对系统的一部分进行重大更改时,可能值得从 OO 的角度进行查看,并在适用的情况下将现有代码移过来。

于 2009-02-09T13:07:59.727 回答
3

在我正在进行的一个项目中(几乎相同的情况,甚至更多——大多数代码都非常糟糕),我正在使用我称之为“波浪式”的技术。我使用的一般想法如下:

  1. 从输出中分离处理。我不能在这里实现真正的 MVC,但至少我可以将视图移动到单独的模板中(有时重复使用它们)并在基本(模型)模板中准备所有数据。
  2. 将所有重复的代码移动到组件中——这是最重要的技巧之一。
  3. 将相关功能分组到组件中。比如说,所有与客户相关的信息都归入 CustomerManager.cfc,发票归入 InvoiceManager.cfc 等。

为什么是“波”?在一个大项目中,我不能坐下来重写所有与客户相关的代码。所以我一步一步做到了。例如,我必须处理客户注册,用一些属性对其进行扩展。我已经创建了基本组件,将验证表单的方法移到那里(检查登录、电子邮件等)并添加客户 - 所以这个页面以新的风格工作。后来我需要改进发票页面,我需要在其中获取发票所有者的详细信息:我只是将方法添加到客户经理中并摆脱直接查询。稍后编辑客户页面......也可以称为“按需重构”或smth。

根据您当前的项目状态,可能还有其他内容。但这对我帮助很大。希望您会发现这些提示很有用。

于 2009-02-09T13:03:47.897 回答
3

在您更改任何内容之前:创建一整套回归测试!

重构时,目标必须是首先保留功能,这样您就不会直接影响您的客户。

我也同意 Sergii 的波浪式重构——这使您可以将事情分解成可管理的块,而不是一次性完成所有事情。

但是无论你有什么方法,你可以创建的回归测试越多越好——这确实是你可以确认你没有无意中改变某些东西的唯一方法。

于 2009-02-09T14:50:31.150 回答
1

在不知道您的任何代码的情况下,这是非常难以回答的(几乎是不可能的)。

这个问题有点像“我想拆解我的旧大众汽车并从零件中建造一个新的,我应该考虑什么?” :-)

于 2009-02-09T10:58:15.000 回答
1

我的建议是首先将您的业务逻辑封装到 CFC 中,而不是担心您网站的整个表示层。

通过只专注于业务逻辑,您将能够将最重要的功能引入 CFC 并减轻维护噩梦。将这些 CFC 直接“放入”您现有的站点也不会太难。

在将尽可能多的业务逻辑添加到 CFC 中之后,您会注意到这个巨大的怪物已经被缩小了。此时,您现在可以决定要对站点的表示层做什么。您现在可以从众多可用的框架(CFWheels、FuseBox、ColdBox、Mode-Glue)中自由选择以移植到表示层上。

或者你可以说“见鬼”,然后从一开始就在 CFWheels 中重写整个内容:)

于 2009-02-09T14:32:59.430 回答
1

如果您不使用版本控制,请在执行其他任何操作之前进行设置。能够退出中断的重构是一个重要的救生员。之后,我同意发布的内容。您将希望一次处理小块 - 分而治之。

于 2009-02-20T20:40:04.240 回答