有时我正在使用OO des。有时程序风格,每次我使用oop我都觉得浪费资源。说我有一种情况,我需要从数据源,一个bannerinfo池中获取一些值。对于进一步的工作,我可以声明一个横幅类和装饰器以获得额外的功能,但为什么我要做这么难的序列 - 我必须抓住,实例化对象,填充它们,换行等等,而不仅仅是:抓取数据,运行数据程序代码;是的,在很多时候oop只是帮助组织逻辑和做出灵活的决策,但另一方面,它是浪费时间在设计上(我遇到很多问题解决简单的东西,同时把它们放入oop风格),显然是浪费机器资源。我有点陷入这种心态,我很年轻,但我已经看到一些项目在oop - 我不会说他们很容易理解; oop的理想是非常迷人的 - 组织,逻辑上,但...... 那么,你是否应该指出我应该使用oop / procedural样式的情况之间的一些区别。我会批评任何有关该主题的其他文献的链接。谢谢!。
答案 0 :(得分:0)
“抓取数据,在数据上运行程序代码”
我不知道如何通过程序更轻松地处理数据。使用OOP,您可以执行
之类的操作$users = $db->from('users')->where('score',100,'>')->getMany();
或使用ORM:
$user = $orm->entity('User')->findOne($id);
$user->setPassword('abc123'); // set a new password
$orm->save($user);
关于显示数据(在MVC架构中也称为“视图”),我必须同意装饰器可能很烦人。但是如果你使用模板引擎,事情很容易就可以得到。您没有提到您正在使用的语言,但如果您使用的是PHP,则可以使用Twig
就个人而言,即使在小型项目中,我甚至不会做单元测试之类的事情。但是我认为当您需要可维护性,协作性,可重用性等时,OOP就是最好的。
答案 1 :(得分:0)
您抓取的数据具有结构,即字段显示在数据源中每个记录中的顺序。您希望在该数据上运行的代码与该结构紧密绑定(即代码不会应用于其他数据结构,如果数据结构发生更改,您当然希望更改代码)。因此,从“心理信息管理”的角度来看,将数据和行为保持在一起是有意义的,而对象是一种很好的方法。
如果您的程序增长,并且您希望在项目中的多个位置迭代bannerinfo,该怎么办?当然,您可以创建一个可从整个程序中获得的例程,该例程在bannerinfo上执行您想要的操作,并从您需要的每个点调用它。但是,如果您想到使用bannerinfo想要做的其他事情,该怎么办?当然,你可以从整个程序中创建另一个例程,但它与第一个完全不同。如果这两个例程有一些共同的代码可以推送到一个单独的例程,你会创建另一个可以从整个程序中获得的例程,即使它只被其他两个使用了吗?
使用OOP,您将拥有一个具有两个公共方法的类,以及一个用于该第三个例程的私有方法。为什么这三个例程可用于整个程序?答案很混乱。您可以在该类上创建任意数量的其他方法,并且它不会为您不使用该特定类的部分添加混乱,因为它们将不可用。如果bannerinfo的数据结构发生变化,您只需要到一个地方进行更改即可。
当然还有更多,但我希望这有助于证明OOP的用处。这一切都是为了让它易于管理。如果你的具体问题不关心,因为它是一次性的,或者永远不会增长,那么就没有任何好处。
最后的注意事项:这种好处是否值得付出还取决于其他因素,例如你使用对象的程度如何,你试图用它们做什么(继承可能变得模糊),以及语言和语法本身。