- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。
10年前关闭。
不要误会我的意思 - OOP 目前是构建大型代码库的最佳选择。
但是为什么人们要尝试填充任何事情进入 OO View ?
例如:每本关于 OOP 的教科书都包含一个“介绍示例”,它试图在 OO 继承、组合和聚合构造中表达我们对现实世界的一个小看法。而且 - 同时 - 我们都知道它永远不会导致 OO 模型本身 promise 的全能 OO 构造!作者只是制造了一种错觉。
我个人的观点是,OO 对代码结构很好,但它是 不适合代表真实世界的数据 及其关系。恕我直言,关系模型更胜一筹,可能任何其他模型都更胜一筹。
在 OO 设计中,推荐组合而不是继承已经成为惯例——只要有可能。因此,一流书籍建议的那种基于所有继承的对象世界模型看起来很强大,只是一种幻觉。那么,OO 本身可能是一种错觉?而当前以组合为中心的 OO 模型只不过是带有一些标准化语法糖的普通数据结构——这与 OOP 之前的方法没有太大区别。
另一个例子:想象一个我们现实世界的非常复杂的模型。除此之外,还有石块和人类。在 OO 模型中,人类是哺乳动物,动物是有机生命形式等等(OO 强加的严格严格的继承层次结构,你知道......)。石块是非有机物,也许是刚体什么的,都没有关系。
如果你是一个艺术家,你必须找到一个石块,它可以为一个给定宽度、高度和厚度的人类雕像制作一个很好的"template"(?),那么你必须编写一堆特殊情况的 OO 代码来从人体模型和石块模型中检索这些属性。或者,您的整个世界模型是为支持几何查询而构建的 - 那么这将很容易!但这导致 的结论OOP 不擅长表示数据 以允许我们在不同用例中使用它的方式。 OOP 只允许我们准确地表示我们预先设计的那些用例的数据。不多了。除了那些预先确定的情况之外,任何使用都只能通过大量摆弄来完成。 关系模型至少尝试以可重用的方式表示数据。 (可重复使用:OOP 曾经甚至占用了这个词)
为什么这么讨厌?
我在一个使用 ORM 的项目上工作 - 它很糟糕。它开始于对数据库建模(因为 ORM 的限制),然后是学习 ORM 的来龙去脉(及其错误和进一步的限制)的时候,然后是对隐式发生的事情的恐惧(new thing(); thing ->save() 创建一个新行,但是“东西”的根在哪里?为什么人们试图使对象尽可能“独立”,但在后面创建对每个表单例的根深蒂固的依赖,那与连接单例沟通.. 天哪.. 我离题了)。
很多本来可以用几行 SQL 和一个小巧的查询 API 完成的事情,却用数百甚至数千行“业务逻辑”代码完成(当然是在应用程序层,而不是在数据所在的数据库中)是,以及像 count() 或 sum() 这样的聚合函数会很便宜)。我认为当人们可以在 OOP 中工作时,他们会感觉更好。但这只是愚蠢的。
而 ORM 的创造者只是想让用户远离“肮脏的东西”。但正是那些人不应该写 ORM - 一个完美的例子:我坚信 ORM-creator 类型的人甚至不知道数据库表可以包含复合主键! ;-)
那么,为什么 OOP 如此占据优势呢?这只是一个半生不熟的抽象,但人们对一切都发誓,如果你问一些,他们甚至可能会告诉你 OOP 将创造世界和平。
为什么 OOP 如此他妈的占据/垄断?
最佳答案
在我看来,如果您的业务逻辑实现正在插入您的数据库设计,那么有人会把车放在马之前。我认为这个想法是开发一个合理的(不,我没有说关系)数据模型,然后实现任何逻辑查询并更新数据。
我的经验是,虽然关系数据库非常适合从用户的角度存储和查询数据,但尝试将关系模型扩展到结构化编程或 OOP 范式中是非常困难的。总有一个翻译层。今天每个人都认为 ORM 是解决方案。虽然从技术上讲,位于关系数据存储和面向对象的数据访问层之间的任何转换层都是 ORM,但当我看到人们谈论 ORM 时,他们似乎在谈论生成该 ORM 层的某种自动化方式。
我不相信存在通用的 ORM 解决方案。我见过的每一个人都充满了危险。这是一个令人头疼的问题,但我见过的唯一可靠的 ORM 层是手工编码的。诚然,在过去五年左右的时间里,我在数据库方面的工作并不多,所以情况可能已经发生了变化。
我同意你的看法,OOP 在很大程度上只是围绕一个坚实的结构化设计的大量语法糖。但是,它是很好的语法糖。它形式化了许多在结构化编程中被认为是“最佳实践”的东西,并添加了一些在纯结构化语言中很难或不可能表达的东西(继承、接口(interface)、多态等)。我们当然可以将部分或全部这些特性添加到结构化语言中,而无需一直使用 OOP,但为什么呢? OOP 显然是过程式编程语言发展的下一步。
关于oop - 为什么面向对象模型如此占据/垄断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756807/
我有一个布局对话框 主题 View .xml
我有两个 JPanel 放置在 JFrame 内,我希望它们都占据框架的整个宽度,但我不知道如何。另外,我不是 setBounds() 方法的忠实粉丝,因此我想知道是否有一种方法可以使组件采用完整宽度
我希望我的图表占据 100% 的 View ,我只想查看图表。我想删除那个空白。但我得到了这个结果: 这是我的 XMl 布局: 最佳答案 从 RelativeLayout 中删
我遇到以下困境: 单元格的尺寸正确,但 imageView 未填充单元格。我尝试通过控制从 imageView 拖动到单元格来向 imageView 添加约束。 这仍然没有填充单元格内的 imageV
我在显式宽度的父项中有许多子项,例如 document.querySelector('.parent').scrollTo(100,0) .parent { overflow: auto; w
我有一个 TextBox,旁边是一个带有 float:right 的 Button,它们都在一个具体宽度的 div 中。 Button 具有由宽度和高度定义的具体尺寸。我希望 TextBox 占据 B
我有一个如下所示的产品模板: 它的 html 是:
你好,当我的应用程序在网络上是响应式应用程序时,我遇到了一个小问题,当我调整浏览器大小时,一切看起来都很好,但是当我选择响应式选项时,我遇到了问题,看起来我的导航栏占用了大约 90%屏幕宽度而不是 1
我正在尝试创建 QScrollArea,其中 QHBoxLayout 包含一行 od QWidgets。我希望小部件占据所有可用高度并相应地调整其大小。 我的小部件是 QLabel,在内部显示按比例缩
我有一个具有以下项目布局的自定义 ListView : 除了 start_point 和 end_point 的高度不相等外,它显示的大部分与我想要的一样
我发现如果我有一个JMenuBar,并且它的最后一个元素(最右边的一个)是一个JMenuItem,它将占据上所有剩余的空白空间JMenuBar,这绝对不是我们想要的。 将“关于”JMenuItem 想
我在特定页面中有一个 DropDownMenu,该页面呈现在表格列内。 当我点击打开菜单时,它以 100% 的页面高度打开。 我在文档和社区中都找不到类似的东西。 我与子组件没有相对/绝对容器关系。
我有以下片段。它有一个问题 - Enter your passcode: td 占用太多空间,而且看起来很丑。 我尝试将 width:50% 设置为那个,但没有成功。 我想要实现的是输入字段与 Exp
这个问题在这里已经有了答案: CSS Single-column layout centered fixed-width 100% height w header and footer (5 个答案
我有以下网页。 我正在尝试让蓝红白渐变填充整个屏幕高度。目前我在内容容器的两侧都有两个标志,它们都被一个主容器包围。 .container{ width: 100%; background:
我无法让复选框 div 占据 100% 的高度,如下面的代码/ fiddle 所示。正如您从第二个 child 看到的那样,高度为 100%(悬停不会占据 100% 的高度),但我也希望第一个 chi
如何使 container>ul>li>a 占据 container 的整个高度? http://www.bootply.com/119627 除非 100%,否则我不想设置它的高度 最佳答案 您可以
我有一个 super View ,我在其中添加两个 subview (subview1 和 subview2)。 我希望 subview1 与 superview 具有相同的宽度并与 supervie
我有几个嵌套的 DIV。无论屏幕大小如何,我都希望我的第二个 Div 占据视口(viewport)的 100%。我在这个 div 中有两个图像和两个按钮。每当屏幕“变大或变小”时,按钮就会被推到父 d
在下面的代码中,我将 div 与类 container 的 display 属性设置为 flex 并且它有两个 div 类 sidebarcontainer 和 mainpage 的 child ,我
我是一名优秀的程序员,十分优秀!