V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
6260628
V2EX  ›  程序员

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

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

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

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

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

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

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

    水平不行就闭嘴,没空和你普及基础知识。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   843 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:22 · PVG 05:22 · LAX 13:22 · JFK 16:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.