2011-09-05 51 views
2

php新手。我正在研究一个旧代码,我必须添加许多新功能。 该代码现在不使用任何面向对象的php5功能,但我将使用它们,并将尝试在空闲时间重构重要和复杂的旧东西。

我有几个问题:
1.被别人从Java的背景下,一类中访问外部功能的能力来似乎真的错了,我有才能重新使用旧的功能做。这是一件正确的事情吗?...对我来说感觉非常不自然,有没有更好的方式来重用旧功能?

2.有人可以提出一些很好的设计模式,可以使用旧的PHP代码,使其面向对象,使其优雅地使用新功能。用于制作旧的php代码对象的设计模式

+1

退房:[PHP 5个对象,模式与实践(http://www.apress.com/9781590593806) – ldg

回答

1
  1. 被别人从Java的背景下,一类中访问外部功能的能力来似乎真的错了,我有才能重新使用旧的功能

    这一直做对Java感到厌烦。

    无可厚非任何有免费的功能。 “所有事物都必须在OOP中”的口头禅是完全垃圾;只有逻辑上符合对象类型的东西应该是这样的。

    所以不用担心它在所有。

  2. 有人可以提出一些很好的设计模式,可以使用旧的PHP代码,使其面向对象,使其优雅地使用新功能。

    没有设计模式会为您重构。

    设计模式是不是魔术子弹;这个短语可怕地被过度使用,并且仅仅是描述经常使用的设计惯例的一种方式。如果你真的想浏览维基百科上的模式列表,但是我会用最合乎逻辑的方式编写你的代码,然后,如果你注意到它恰好符合某人关于“设计模式”的想法。 ..好吧,我猜你好!

0
  1. 你可以简单地封装了这个功能对象实现呼叫特定接口
  2. 参考1.这是一个一般的规则;只需确定一些目前通过不同功能实现的逻辑“模块”,并将这些功能封装并隐藏在对象和接口后面。
0

您可以使用facade pattern封装对旧代码的访问,为您提供代码和旧代码之间的干净界面。

我已经完成了相当成功的遗留代码,写得相当糟糕(我的惭愧,说!),重写不是一个选项。

我完成了一个很好的干净的界面,可以很容易地修改和易于阅读。这是非常值得的额外努力,并允许我在时间允许的情况下随时重构旧代码(仍然在这方面工作)。

1

这里是我的想法:

  1. 除非你有大量的测试,可以保证你,而你重构代码,利用面向对象的设计不破的一切,我不会建议改变现有代码的工作方式。您可以通过将旧功能通过creation of Facade classes包装到逻辑分​​组中来完成此操作,该功能可以将功能传递到现有代码,或者在需要更复杂的操作时调用现有代码中的几个功能。您的新代码将由需要时与传统Facade进行交互的对象组成,并使用适当的OO设计实现新功能。
  2. 我认为有一件事是必要的,如果你打算重构旧的代码,是有适当的测试到位。如果您尚未进行正确的测试,我会查看SimpleTest。就设计模式而言,它将在很大程度上取决于您现有代码试图完成的目标。
0

我比什么都想法。

如果在Java中你曾经做了一个静态方法,如MyClass的:: someStaticMethod(参数),那么它就像使用“免费”功能。

这就是静态方法真的。它们可以在全球范围内访问,实际上它只是一个非常长的名字,但否则它是一种免费的方法。

你可能会把它们放在一个'class'中,但它确实是java在限定意义上创建全局函数的方式。如果你这样想,PHP自由函数看起来并不那么糟糕,因为它们的名字更短。