|
|
1
2
在我看来,如果您的业务逻辑实现正在推动数据库的设计,那么就有人本末倒置了。我认为这个想法是开发一个rational(不,我没有说关系)数据模型,然后实现任何逻辑查询和更新数据。 我的经验是,尽管关系数据库非常适合从用户的角度存储和查询数据,但尝试将关系模型扩展到结构化编程或OOP范式是非常困难的。总有一个翻译层。今天,每个人都认为ORM是解决方案。虽然从技术上讲,任何位于关系数据存储和面向对象数据访问层之间的转换层都是ORM,但当我看到人们现在谈论ORM时,他们似乎在谈论某种自动生成ORM层的方法。 我不相信广义ORM解决方案存在。我见过的每一个人都充满了危险。这是一个令人头疼的问题,但我见过的唯一可靠的ORM层都是手工编码的。诚然,在过去五年左右的时间里,我没有太多地使用数据库,所以情况可能已经发生了变化。 我同意你的观点,OOP在很大程度上只是围绕一个坚实的结构化设计的大量语法糖分。然而,它是 好的 语法糖。它形式化了许多在结构化编程中被认为是“最佳实践”的东西,并添加了一些很难或不可能用纯结构化语言表达的东西(继承、接口、多态性等)。我们当然可以在结构化语言中添加一些或所有这些特性,而不必一直使用OOP,但为什么呢?OOP显然是过程编程语言发展的下一步。 |
|
|
2
0
OOP只是工具箱中的另一个工具,但是要记住,OO现在已经成为主流编程语言的焦点,现在已经超过20年了——从C++开始,然后转到java和C语言。这可能与为什么该模型目前“如此占主导地位”有关,而不是其他任何因素。 |
|
|
3
0
OOP的重点不一定是代表世界上每一个对象的每一个方面。重点是代表你所关心的东西。例如,假设有一所房子。从事房地产业务的人会关心位置、售价等。我不知道,建筑商可能会关心蓝图ID之类的东西。关键是,你对重要的东西建模,而忽略其他的。如果需要更多信息,请稍后添加。 是的,这使得“House”类适合正在构建的应用程序,可能不适合其他应用程序。OOP的总体目标不是重用类,尽管有时会发生这种情况。重点是将数据与可能影响该数据的操作捆绑在一起,从而从概念上将问题从数百个变量和函数减少到几个具有已知和已测试接口及相关行为的对象。 |
|
|
4
0
Human和StoneBlock都应该继承MaterialObject,MaterialObject具有高度、宽度和深度属性,甚至在给定另一个MaterialObject时实现一个biggerThan()方法。 |
|
|
5
0
OO之所以“占位”,是因为它已被证明是解决许多编程问题的最佳选择。同样,对于许多数据存储和检索问题来说,关系模型也是一个很好的选择。当我说“很多”时,我的意思是“太多了,其他的都相形见绌”。事实上,两者结合在一起是一个很好的组合,但在映射这两种范式的交汇点时存在复杂性,因此ORM。 我几乎认为你的问题是不真诚的,但后来决定这是缺乏经验(不是故意侮辱,只是从问题/断言中猜测)。你会发现问题非常复杂,OO是唯一可行的建模方法。并非所有东西都是数据库支持的网站或报告工具。许多系统大多是“业务逻辑”,其中最好的解决方案是OO解决方案(根据我的经验,例如:控制和监控机器人飞机及其各种有效载荷)。尽管如此,许多流行的数据库支持的web框架都是OO+RDBMS(Rails、Grails、Java+Spring+Hibernate等),因为这种组合非常强大。 虽然肯定会有一些流行时尚和粘性但过时的范例,但我建议,当有很多选择(面向对象、函数式编程、以RDBMS为中心等)时,人们几乎总是选择最高效的。至少10年来,这在很大一部分软件问题上一直是面向对象的。 |
|
|
6
-1
因为归根结底,它很好地近似于我们自己建模的方式。对此经常提出的反驳是,计算机没有对象的概念,它们都是1和0,但这种分析是空洞的,就像说人类所有的思想都只是神经元和电脉冲一样(可能是这样,但这不是一种看待事物的有用方式)。 所以你不喜欢继承?我也是。行为的继承是穷人的代码重用。另一方面,接口的继承性很好,因为它提供了多态性。 你不喜欢吗?没有人强迫你使用它们。OOP和RDMS之间有一个冲突,我认为这不容易解决,大多数ORM试图解决这个问题都很幼稚。ORM的局限性并不是OOP中的一个缺陷。 |
|
|
user384884 · Dapper返回零guid 2 年前 |
|
|
qanqanqan · 如何在Django ORM中通过最大值获取对象 2 年前 |
|
|
Kirill · Django RawSQL注释字段 2 年前 |
|
|
nepko · Django将字符串过滤为整数? 2 年前 |
|
|
Emirhan Ay · 用实体框架建立两个实体之间的关系 2 年前 |