可以看看里面报出的问题, 点击链接可以看到问题的详细解释.
很多问题是可以回避的.
为什么很多代码都是直接从虚类继承, 而不是从接口呢? 比如: Pager
这样的设计怎么考虑的? 我认为这违反了基于接口设计的原则.
这样会有碍团队协作.比如:
1. 我想研究一下代码, 我看到的是虚类, 但是我并不知道虚类之间, 哪些方法是契约方法, 哪些不是. 徒增了我看代码的量, 因为最开始, 我可能只是想从整个大架构开始.
2. 由于很多是虚类, 如果我想自己实现一个子类的话, 我并不知道, 到底我需要实现多少方法才算完.
3. 同时, 很多虚类里面的方法, 直接返回的null什么的, 在PMD里面, 建议是直接抽象该方法的. 不然, 很多的继承类, 会忘记实现这个方法. 但是, 很可能这个方法是不可用的.(这也说明接口的必要性)
加一个PMD的规则
比如有这么一个规则: ConstructorCallsOverridableMethod
http://pmd.sourceforge.net/rules/design.html#ConstructorCallsOverridableMethod
如果我有继承类, 实现了:
Application的addCmd
FileSqlManger的refresh
...
我检查了这些方法, 都只在构造的时候被调用了, 所以, 外部不用的话, private them.
2009/10/12 张志昊 <zozo...@gmail.com>
我曾经用 FindBug 查过一次,有些问题我认为不是问题,又懒得研究 FindBug 的规则,所以我就把 FindBug 卸载了TH你帮忙总结一下,用哪些工具检查代码比较好。先贴几个高危的例子看看。总之 Code Review 的工作,你来领导吧,我们听你的zozoh2009/10/12 Wendal Chen <wenda...@gmail.com>哦? 你打算加上这些代码检查工具吗?
我不久前才帮公司的一个项目搭建自动构建服务, 里面使用PMD,Findbug,CPD,CheckStyle等2009/10/12 Peter Tung <mas...@gmail.com>
我用PMD查了一下代码, 在下载里面, 能够看到1级和2级的警报.
1,2级表示高危......
可以看看里面报出的问题, 点击链接可以看到问题的详细解释.
很多问题是可以回避的.
--
Best Regard
zozoh @ 2009
-----------------------------------------
2009/10/13 唐浩 <mas...@gmail.com>为什么很多代码都是直接从虚类继承, 而不是从接口呢? 比如: Pager
这样的设计怎么考虑的? 我认为这违反了基于接口设计的原则.---------------------------------------------------------------------------------------------------------------------------------------------[zzh:] 继承的好处是,如果子类大多类似,只是某些具体的行为有点偏差,那么继承一个共同的父类,可以共享很多代码,非常划得来。 我程序设计的原则只有一个:代码写的少。至于是不是要继承,还是实现接口,如果继承能让我代码少很多,我就会用继承。具体到 Pager, 我通过继承,让子类完成不同数据库特殊的分页方式。 而父类则编写和数据库无关的代码即可。暂时,我还想不到更好的结构,让这簇代码变的更少。如果你增加一个 Pager 的接口,哇,我估计代码又会变多一些吧。---------------------------------------------------------------------------------------------------------------------------------------------
这样会有碍团队协作.比如:
1. 我想研究一下代码, 我看到的是虚类, 但是我并不知道虚类之间, 哪些方法是契约方法, 哪些不是. 徒增了我看代码的量, 因为最开始, 我可能只是想从整个大架构开始.
---------------------------------------------------------------------------------------------------------------------------------------------[zzh:] 虚类的原则就是: 继承的子类一定会对。 就是说,我在虚类里写一个虚方法。你子类只要把这个虚方法实现正确,你就正确了需方法需要详实的注释。 这样你看虚类代码就行了,基本不太需要仔细看子类代码。 当然,我现在代码里,虚类通常是没有注释的。另: 啥叫 ”契约方法“ 啊?
---------------------------------------------------------------------------------------------------------------------------------------------
2. 由于很多是虚类, 如果我想自己实现一个子类的话, 我并不知道, 到底我需要实现多少方法才算完.---------------------------------------------------------------------------------------------------------------------------------------------[zzh:] 理想的虚类设计应该做到这个效果: 通过 Eclipse New Class 的对话框,生成的子类,会自动填充虚方法的实现。你把这些实现写完,你的虚类就完成了。
---------------------------------------------------------------------------------------------------------------------------------------------3. 同时, 很多虚类里面的方法, 直接返回的null什么的, 在PMD里面, 建议是直接抽象该方法的. 不然, 很多的继承类, 会忘记实现这个方法. 但是, 很可能这个方法是不可用的.(这也说明接口的必要性)---------------------------------------------------------------------------------------------------------------------------------------------[zzh:] 能举个具体的类吗? 写个方法返回 null 的确不太友好。 我通常是,如果子类 A,B,C 。 A,B 需要返回 null,C 需要返回别的。 我一般会把这个方法写在父类里让 C 来重载即可。 这样做有点不好。所以一般是我假设你不会继承的那些实现类,我会这么做。如果我开发给使用者继承的类,则不会这么做的。实际上,我要开放给使用者扩展,通常会用接口。 个别的会有虚类,比如 Pager
这个方法似乎是没用了,我似乎是在一次重构以后忘记删除了 :P