自己太菜了,求问,如何看懂有非常多继承的代码?

2021-02-22 23:33:35 +08:00
 fakerw

看一些开源代码,经常被弄得晕头转向,原因是因为某些类调用一些方法, 我要往上倒很多父类才知道原理,

a 类的方法 跳到找到父类 A 然后又找到 父类 A1

b 的方法 找到 B

...

以此类推,跳来跳去就晕了,

平时写前端代码,用的都是组件库,写的都是表单 crud,继承用得很少很少,

求问各种大佬,怎么才能不.....当局者迷呢

太晕了

7055 次点击
所在节点    程序员
48 条回复
lewis89
2021-02-23 10:02:16 +08:00
一般超过三层 就没人摸得着头脑了,Spring 里面的设计 至少超过 7 层.. 类图绕得人头大,不过你可以先看下 架构 overview
chesterzzy
2021-02-23 10:16:14 +08:00
Sourcetrail 等类似的代码查看工具,应该会有一定的帮助
yazoox
2021-02-23 10:34:34 +08:00
别总想着“继承“。如果可能,应该可以尽可能少的使用继承。等你代码写多了,就能体会到,很多时候,”不继承“比”继承“要好。

design principle 里面有一条就是,composition over inheritance
soulmt
2021-02-23 11:00:39 +08:00
用 xmind 梳理调用流程和 class 之间的继承关系,再标注一下各个类自带的函数以及做什么的就好了,光看的话,确实很难办
soulmt
2021-02-23 11:01:26 +08:00
@yazoox 写业务能不继承就不要继承,写框架还是比较推荐的。
acmore
2021-02-23 11:04:30 +08:00
难道是在看 Spring 源码么,那一大堆 BeanFactory & ApplicationContext 的继承确实挺恶心人的。
而且这一堆继承与其说是基于设计,倒不如说是基于历史的,确实让人头大。
taogen
2021-02-23 12:08:31 +08:00
做过一个玩具项目,可以根据 Java doc 文档转换为 plantuml 类图。有兴趣的可以看看。
https://github.com/tagnja/plantuml-generator
tmackan
2021-02-23 12:17:24 +08:00
idea 可以查看源码的 uml 图的,右键点击 Diagrams
taogen
2021-02-23 12:29:45 +08:00
@tmackan #28
之前没发现这功能,这个功能挺不错的。但是好像只能看一个类的上级继承类,不能看下级子类,也就是不能看涉及一个类的完整继承链。
happinessnch
2021-02-23 12:41:29 +08:00
继承不仅仅是代码复用,也是 OOP 设计的一个方法,继承类与父类要存在 is a 的关系,所以先理解基类,由顶向下的理解,再去研究某个类的某个方法具体实现,先了解一下 OO 的设计原则和基础。
index
2021-02-23 12:49:15 +08:00
用好 ide 快捷键,在看类关系,子类,接口实现等,都有快捷键,能很大程度减少视线迷路的概率
abersheeran
2021-02-23 13:05:15 +08:00
继承太多,往往是代码太烂。
johnsona
2021-02-23 13:21:07 +08:00
理解核心的代码即可 搞懂全部完完全全没必要
Rocketer
2021-02-23 13:46:11 +08:00
继承是为了复用,所以父类、爷类、祖宗类都应该当黑盒使,你就只关注你用到的那一层就行。只要不是那种方法名看不懂要做什么的垃圾代码,就没必要翻到上层去看它。
tmackan
2021-02-23 14:14:54 +08:00
@taogen 可以的 你捣鼓下~
tmackan
2021-02-23 14:15:30 +08:00
@taogen 右键选择 implement 或者查看 parent 就可以查看 上下游了,说实话 java 源码看起来很费劲
whoim
2021-02-23 14:26:31 +08:00
个人觉得,没必要每一个类每一个函数都要知道是干什么的,只要知道整体逻辑就可以!否则只会陷入各种细节中!
fiveelementgid
2021-02-23 14:28:48 +08:00
不知道,C#不支持多重继承
Inherite: only one class and multiple interfaces
auh
2021-02-23 14:30:23 +08:00
小菜鸡,闲谈两句,篇幅不大。楼主看看。小菜鸡害羞,其他人忽略。https://player.fanlushuai.win/coder/%E7%9C%8B%E6%87%82%E8%AE%BE%E8%AE%A1/
bruce0
2021-02-23 14:39:07 +08:00
@pastgift 我也同意,好的代码不是说用了多少种设计模式。设计的多么优雅,而是能简单易懂,让人一看就明白

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

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

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

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

© 2021 V2EX