请教Banq和大家个设计问题

Banq大大:

因为我最近在搞单元测试,发现公司项目代码的类里面有大片大片的private方法,导致其对测试不友好。我就浏览了下JDON源代码,发现都是PUBLIC的方法,还没看到PRIVATE的方法。

是因为我没看到,还是因为JDON的都是PUBLIC方法?这个体现出什么样的设计思路呢?

我刚接触JDON,所以对其不熟悉,请谅解。
[该贴被fortry于2008-12-18 00:13修改过]

除了类的作者不应该有人关心private的部分。如果发现大量的需要被测试的private函数,恐怕是类相关的设计问题了,或者就是业务分析过程出现了问题。

另外建议全部使用protected代替private

我的建议:包内功能用默认的,为了变化可以用protected,public的都有接口,private的让类作者自己处理。

同意楼上,其实我很不喜欢IDE生成类和生成接口的方式一样,都默认public,我用到的大部分类都只是包内可见的。

我公司里的领域逻辑类里面有大片大片的private方法,而看到JDON的类里面很少出现private方法,所以在反思是公司的代码设计上有问题(如抽象度不够等),还是复杂的领域逻辑类本来就是这样。

我倒是觉得改为package的或者protected的话,对测试比较友好。

大家似乎都不建议方法作用域写成private,为什么?
[该贴被fortry于2008-12-18 23:26修改过]

呵呵,原因很简单,流行开源的年代,连源都开了还要private什么呢。

做设计一个必须遵守的原则是绝对不要轻易地说“不能”,比如private,使用权永远都在使用者手中而不是在设计者手中。如果连创造者都说“我不能”了,下一任还有可能说“我能”么,这样的设计只能是路越走越窄,留下充足余地才有升华的机会。

Ant对于多数人来讲已经是很好的设计了吧,但确实有一次我是多么希望可以重载一个他的private函数呀。

流行开源不能成为不建议使用private的主要原因吧。
这里面有什么设计思路及理念呢?

设计本质:使用private就是想拒绝重用。

大片大片的private方法,导致其对测试不友好

导致其对测试不友好 从何说起

private方法 被public方法调用 你直接测试public方法即可

Banq大大 这个称呼很个性

楼上的,一个PUBLIC方法调用了很多的PRIVATE方法的话,会容易导致测试的覆盖率降低,因为路径太多了,从而可测性降低,故其对测试不友好。

Banq大大,我看到JDON里面的代码都很简洁,是良好的设计的必然结果么?公司代码里面PUBLIC方法就调用很多PRIVATE方法,PRIVATE方法又调用另外的PRIVATE方法,这是复杂业务逻辑导致的必然结果么?

另外,Banq大大,如果要学习设计方面的知识,是否需要阅读框架的源代码来看看什么是优秀的设计? 虽然大大您不赞成看框架的源代码。

banq的意思不是不能看源代码而是要注意看什么,要去借鉴人家的设计思想而不是编码方式。

很多时候我们都会发现编码和测试甚至是部署的时候遇到了很难解决的问题,其实这些问题的根本原因就是设计的失败,一个良好的设计就是为了解决实际应用中的问题。

业务过程的复杂通常带来系统结构的复杂,但是局部代码的简洁和优雅是可以被始终保证的。现行的各种框架、容器都是为了做到这一点而产生。

所以如果你发现代码既不能良好的测试、又不能被良好的阅读,就需要反过头去考虑设计层次的缺陷了,这是一定的。你们的项目现在遇到的一定是系统层面的设计问题。