关于 accept interfaces, return structs

2021-11-19 09:33:07 +08:00
 iyear

这句话出自 https://en.m.wikipedia.org/wiki/Robustness_principle

但是标准库也经常是返回 interface ,最简单就是 error,底层对上层屏蔽自己的实现细节,这不是很自然么

这句话我看很多文章都是在拿工厂模式说事,是不是只针对部分场景,如果上层只是想要一组通用的行为,底层返回 interface 没啥问题吧

1186 次点击
所在节点    Go 编程语言
6 条回复
mcfog
2021-11-19 09:57:05 +08:00
https://github.com/go-proverbs/go-proverbs.github.io/issues/37
rob pike 并不 100%赞同这句话并拒绝将其加入 golang proverbs
2i2Re2PLMaDnghL
2021-11-19 10:27:45 +08:00
1. 我没发现你这个链接里有标题里这段话,如是来源具体历史版本,请提供;
2. Robustness principle 实质上导致了世纪初的 Web 生态大混乱:因为不是所有人都严格遵守之,而兼容性测试并未进行广泛配合;
3. 我认为最优兼容性实践是在所有未定义行为上人为施加随机性,依据是耗散结构理论。
Nitroethane
2021-11-19 10:56:51 +08:00
最近在看 docker 源码,这种设计挺普遍的,方法的返回值类型是 interface ,实际 return 的是实现了 interface 的结构体实例。我觉着这种思路挺好啊,对外部屏蔽内部的实现细节
iyear
2021-11-19 11:01:28 +08:00
@2i2Re2PLMaDnghL be conservative in what you do, be liberal in what you accept from others 算是这句话的口语化流传版本吧
JohnSmith
2021-11-19 13:03:02 +08:00
过早抽象不好
mason961125
2021-11-19 13:37:07 +08:00
emmm 其实我想问一下,不返回接口的话你们都是怎么 mock 的...?

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

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

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

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

© 2021 V2EX