【发布时间】:2010-12-17 14:26:33
【问题描述】:
我已经阅读了大量的教程,编写了很多课程,使用了它们,但我仍然无法弄清楚一些 OOP 要点。
我的意思是,我想我明白了这个理论。这是一种范式,一种思考和解决问题的不同方式。我知道所有的共同点:代码重用、封装、更好的错误处理、更容易维护、继承、按合同设计、更好的文档、聚合、组合、一些设计模式......
也就是说,让我们开始真正的交易吧。假设我有以下内容:
- 一个数据库,以及一个用于访问和查询它的类。
- 我有一个名为 person 的表和另一个名为 address 的表
- 简单的业务规则:一个人可以有一个或多个地址(家庭、工作、送货......),简单的一对多关系
- 我有一个用于公共操作 (CRUD) 的高级课程。每个表都有一个类,该类是该类的扩展。
- 当然,每个类(人员和地址)都有自己的方法:例如,getAddressByLocation 或 getPersonsByAge。
- 还有十几个视图和几个表单
所有这些都很棒而且肯定很有用,但是……我不能停止思考最简单的情况:列出一些人。是的,因为输出表上的每一行都是在一个类实例上创建的。我无法停止思考在未使用的资源上使用了多少内存和 cpu。
列出 50 个人意味着创建 50 个实例,充满资源,如 crud、过滤处理上传、验证规则等,而我需要的是运行查询并通过简单的循环输出结果。
这让我很困惑。不仅仅是混淆,因为我已经看到了一些应用程序,当业务规则稍微复杂一点时,运行时间会随着数据库呈指数级增长。
我认为,是否需要创建新类或纯脚本来处理输出和报告?如果是,那么这意味着双重努力,使用 OOP 毫无意义,一旦我需要为同一个数据库实体创建许多不同的类。编码变得更难,维护变得不酷。
我错过了什么吗?或者这是 OOP 方法的一个缺点?
我们是否应该牺牲直截了当、精简、速度更快的代码来获得更快的开发和维护?
编辑
正如所料,我之前提出的一些观点对某些人有误导性......
首先,我非常擅长大型项目(我曾在 IBM 供应商为 Sprint/Nextel USA 和 Directv North America 工作,所以我习惯于看到每天处理一些 TB 的数据)。
当我说从数据库中检索到 50 个人时,我并不是指严格意义上的 50 个人,我只是想给出许多记录的概念。我知道 50 条记录对今天的服务器来说不算什么。 5000万是。如果合适的话,想象一下最后一个数字。
【问题讨论】:
-
Listing 50 people means creating 50 instances- 没必要。在可维护代码方面,OOP 是大炸弹。无论如何,这是一个很好的问题,但可能更适合新的programmers.stackexchange.com(我认为这里有类似的问题) -
没有OOP我活不下去!此外,您的陈述应该回答您的问题,因为您似乎不了解 OOP 是什么以及如何使用它:)
-
为什么需要制作 50 个实例?创建一个接受连接和查询并返回所需输出的 PeopleLister 类。
-
@nos - 重点不在于编码本身,而在于运行时和语言内部。据我了解,当您创建一个类并实例化它时,所有属性和方法都在内存中可用。当您不需要它们时,为什么有大量可用的方法?那是我的问题。
-
@Dave 与对象,方法不会被复制,每个对象实例化都会重复使用一组方法,通常只有属性是每个对象的。