对象模型与关系模型阻抗不匹是什么意思,有没有大神能帮忙具体的解释一下

2019-09-09 20:29:27 +08:00
 6260628

https://www.cnblogs.com/royi123/archive/2013/05/31/3111636.html,这篇文章里面提到阻抗不匹,看完之后看他所有字都明白,但是什么是阻抗不匹还是没听明白?

3124 次点击
所在节点    程序员
19 条回复
lalalakakaka
2019-09-09 20:33:31 +08:00
阻抗匹配是电子电路 /射频电路的概念。这里应该是一种比喻,粗略看了一下,应该是指数据库模型与实际业务模型不匹配带来的问题。
6260628
2019-09-09 20:34:30 +08:00
@lalalakakaka 但这种情况什么时候会发生呢? 什么情况下会出现这种问题
wangkai0351
2019-09-09 20:36:10 +08:00
6260628
2019-09-09 20:45:21 +08:00
@wangkai0351 这篇文章我看过了,没看明白,查一下百度不难,看一下我的贴子再回复有这么难吗?
shidenggui
2019-09-09 21:07:04 +08:00
阻抗不匹配是指通常我们在面向对象语言中操作的对象都是以数组、集合等方式组织,层层嵌套,类似树形结构,但在关系型数据库中通常只能平铺,数据库模型和面向对象模型的不同导致没办法自然的持久化内存中的对象。

比如一个作者对象 author,如果我们想获得作者写过的小说,在面向对象的编程语言中只需要 author.books 即可,但是持久化在数据库中却需要 author books 两表通过外键关联,中间转换的开销即为阻抗不匹配。

不匹配的情况还包括两种模型支持的数据类型不同,查询语法不同,事务的支持等等,不过最主要的还是存储结构的不同。
reus
2019-09-09 21:23:00 +08:00
所以就应该只用关系模型来建模,不用什么面向对象。
loading
2019-09-09 21:26:26 +08:00
看到阻抗两个字,我头有点疼……
lalalakakaka
2019-09-09 21:32:12 +08:00
@6260628 不太清楚您的编程经验如何?对于任何一个和数据库打过交道的程序员,这个问题是不言自明的。平时吃过太多的数据库模型和业务模型不匹配的屎了,就文中“努力将对象挤压进关系型的持久化”这一句话,不知道多少程序员都深有同感。如果您没遇到过这种问题,可以亲手试试做些和数据库相关的业务,就知道了。
cm2gseh
2019-09-09 22:06:40 +08:00
比如,某项目中,

某产品的接口说明书中写着:
用户对象 R,可以操作产品,
产品对象 A 拥有
- 属性:名字,长,宽,高
- 接口:设置名字,获取名字,获取体积,获取表面积等

然而,自动化工具的接口是:
定义组件 i,定义组件 j,然后定义组件 i,j 之间的协议:
- 定义发送模板,
- 定义接收模板:当接收到字节 X 走分支 Y,当收到字节 Z 走分支 W,类似这样的套路

最后,要求是请对项目实现自动化测试,比如:case:用户设置、获取产品名称。
zhazi
2019-09-09 22:11:18 +08:00
@lalalakakaka 请教下什么叫数据库相关的业务?
FrankHB
2019-09-10 03:37:01 +08:00
@reus 然后挤着被存储过程喂屎是吧。
6260628
2019-09-10 10:23:55 +08:00
@shidenggui 您的回答兼职太完美了,已经明白了,谢谢
6260628
2019-09-10 10:26:59 +08:00
@lalalakakaka 我应该已经脱离了初级程序员的阶段,看了上面的回复我已经明白了,这个事之前应该是知道的,但这个词不太理解啥意思
6260628
2019-09-10 10:28:24 +08:00
@cm2gseh 您这回复有点抽象,4 楼回答的比较容易让人理解
6260628
2019-09-10 10:29:21 +08:00
@all 感谢各位回复,已经明白了,5 楼个人感觉是正解
reus
2019-09-10 11:09:08 +08:00
@FrankHB 不懂什么叫“建模”可以闭嘴的,我就不明白存储过程是怎么牵扯到的。
zhanao1994
2019-09-10 14:57:08 +08:00
软件领域还有阻抗概念,长见识了
FrankHB
2019-09-21 22:27:05 +08:00
@reus 你光建模不实现?那还有个什么鬼匹配问题?
否则你糊到建模工具上的东西有不落实到一个非纯 DDL 的实现上的?
依赖什么智熄关系模型久了就是看什么都变成钉子了。滥用存储过程算是连带晚期症状。
而且威力实际就是比滥用面向对象大,因为烂的面向对象设计很容易让代码糊得长到可疑而露马脚,而烂的关系模型花样多了去了。
reus
2019-09-22 01:04:05 +08:00
@FrankHB 用关系模型建模就等于用存储过程实现?????????????

水平不行就闭嘴,没空和你普及基础知识。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/599417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX