PHP中面向对象的编程 - 某些应用程序的某些方面是否过度杀伤?

时间:2011-02-01 06:21:31

标签: php oop

我最近一直在阅读和深入研究OOP中的理论,似乎总有一个问题出现在我面前。

似乎某些概念,例如抽象类,接口以及较小程度的可见性,更多地与其他人将扩展您的代码的情况有关...

例如,假设我正在为一家小公司制作一个简单的CRUD应用程序来存储客户信息,联系信息,订单等。应用程序的大小可能需要OOP架构,但我知道没有其他人会扩展此代码的偏移量,一旦我完成它将成为一个“封闭”项目。因此,似乎为未来做好准备,并通过抽象类,接口创建这些保护和合同可能有点矫枉过正?这看起来准确吗?

所有这一切,我都是在任何时候都正确而彻底地做事。我也理解OOP的主要目的之一是为了将来的可维护性和可扩展性。我有时很难绕过接口和抽象类,我感觉这是因为我做的小项目很少涉及其他人扩展代码,或创建API等。

5 个答案:

答案 0 :(得分:2)

  

应用程序的大小可能需要OOP架构,但我从偏移量中知道没有其他人会扩展此代码,并且一旦完成它将成为一个“封闭”项目。因此,似乎为未来做好准备,并通过抽象类,接口创建这些保护和合同可能有点矫枉过正?这看起来准确吗?

嗯,简而言之,这不准确。如果您出于某种原因编写代码,则很有可能需要维护代码。遵循良好的OOP实践将使将来更容易调试问题。但这不是OOP的关键所在。

正如您所指出的,OOP范式的真正好处在于未来的修改。从the 60/60 rule开始,我们知道60%的项目成本来自交付后。其中60%的成本来自规范的变更。这就是你应该做“所有工作”的原因。

当然,对于某些项目来说,这将是完全矫枉过正的。但关键是,当您不更改应用程序时,唯一一次您可以在交付后实际知道它是否过度。我亲眼目睹了许多适合这两个类别的项目(在交付之前我们认为会死,但不是,我们认为那些会非常活跃但是已经死了)。因此,在您做出修改之前您无法确切知道,它可能(或者更可能是,取决于您的确切情况)值得为所有项目投入所有努力......

请记住,如果你第一次没有时间做正确的事,你什么时候有时间做?

答案 1 :(得分:1)

老实说,在开始编写具有足够复杂性的代码之前,您不会编写任何接口或抽象类。他们觉得你在书中看到的例子有点过分的原因是他们经常这样做。但是,一旦你真正进入其中一个大项目,你就会明白为什么它们很有用。

你将立即受益的是简单的类,可能有一些浅的继承。最明显的地方将是您的数据库抽象和数据模型。即使您的程序很小,您也可以立即受益。如果有两个地方你创建了一个新的博客文章,那么拥有一个博客文章对象会立即将创建它的代码以及与之相关的所有数据库交互移动到一个地方而不是重复:

$post = new BlogPost();
$post->setTitle("Hello World");
$post->setContent("An awesome update about my life!");
$post->save();

...等

答案 2 :(得分:0)

不仅是其他人在未来扩展您的代码,而是

如果您的应用程序是一页或非常小,您可以在程序上编写PHP代码。

答案 3 :(得分:0)

And I also understand that one of the main purposes of OOP is for maintainability and extendability for the future.你在那里总结了很多。如果不是为了目前的可用性,它肯定可以通过在开发过程的早期采用这些方法来防止主要的秃斑。

您如何确定它将成为一个“封闭”的项目?是否真的不可能没有其他功能/修改发生?

答案 4 :(得分:0)

OOP最重要的是语法变体。您也可以用过程语言或低级语言编写面向对象的代码(参见glib)。

因为它是一种语法结构,所以它应该用于使代码更具可读性。只有这一点。可维护性和可扩展性是次要属性(有时是错误归因)。

避免对象幸福,但不要避开合理的结构 http://www.codinghorror.com/blog/2007/03/your-code-oop-or-poo.html