无责任书评-java与模式 第二(200分)

J

jianl

Unregistered / Unconfirmed
GUEST, unregistred user!
第一贴在http://www.delphibbs.com/delphibbs/dispq.asp?LID=1806773
主要讨论了为什么的问题.
这一贴将主要在于细节.
1 浪费文章,有关水果的简单工厂模式我已经在两个地方看见了,而且代码也抄了两遍.
可耻!
2 作者居然认为
point = class
private
x,y :integer;
public
function getx:integer;
function gety:integer;
function setx(value:integer):boolean;
function sety(value:integer):boolean;
end;
要比
point=class
x,y:integer;
end;
好,
简直要吐血.调用point类的人更会吐血.
 
终于看到了抽象工厂,还是觉得废话太多.一些没有必要的代码不仅加上,而且还要解释
 
说一个学模式的办法
大概看一遍design pattern的书,
然后找一个好原代码例子, eg, Jlive, Junit, or shuts.
把里面的类都记下来, 画出sequence diagram, 和class diagram.
一个一个模式的去找例子里面的实现.
 
谢谢yyanghhong,
不过确实不知道Jlive, Junit, or shuts.是什么东东。
 
不解楼主2为什么会这么认为,主要是嫌调用罗嗦了吗?
个人觉得没什么,就像Delphi中可以通过属性调用一样意思吧,
推荐一个地方主要关于设计模式的论坛解道(J)论坛
www.jdon.com
很多设计模式讲的不错 :)
 
btw: Jlive是一个开放源码的论坛,可到www.jdon.com下载.
 
我说两句,我最近正在看java 与 模式,发觉,有些开发中模糊的认识慢慢清晰点!
以我个人来看,当然是第一种设计要要好,当然,也要看你的项目了,如果,只是几千行代码,几百行代码,甚至是自己使用小程序,那第二种在编写时是简单些!但当项目的代码量到一定程度,特别涉及到后期的维护,功能的增加,你就会发现善用模式的威力了!
还有,作者介绍时,当然用比较简单的例子来说明,这更说明作者的功力了,难道,可用十行代码说明的问题,非要用到几百行,才显得自己的高深!
 
我确实觉得书中point类的设计把调用变得复杂,当然如果用delphi,可以使用属性
使得调用变得简单。
property X:Integer read FgetX write FSetValue;
这样做我没意见,因为设计者把麻烦留给了point类内部。
java我懂的不多,不知道有没有简化的方法。
但我无法接受增加了接口复杂度的方法。
 
》你就会发现善用模式的威力了
我还没看完,呵呵,更谈不上善用了。
 
Jlive 是一个论坛
Junit 是一个测试平台
struts 是web application 开发平台
这几个里面满眼的pattern
 
其实,我觉得,jianl一开始提出的两种方法各有用途,如果,只是在单模块中使用,而且设置,应用的地方不多,那不妨用简单一种解决方法,应该问题不大,但如果涉及到该变量(实例)在多模块引用,还是前一种好!
所谓设计模式,并不能让你首次编码的工作有何时间上,或代码上的收益,它的用处在调试,维护,功能扩展中才会慢慢体现.其中的一个好处就是减少修改代码的难度与工作量;
象上面的例子;
如果,某一天,你需要将X的返回值从inch改为piexl,你会发现,GetX的设计使得修改变得简单,特别是当有太多的地方引用到point的实例;
如果,某一天,系统要求要满足X<Y,时,你只要在SetX,SetY中简单的判断一下能不能设置X,Y值就可;
还有,当你调试时,如果你象知道X在什么时候变化了,变成什么值,那SetX的设计,也让调试变得相对简单,你只要在SetX中简单的设置一个断点;
在代码简单的时候,显示出的优势不明显,但随着类的增加与复杂化,慢满会发觉它的好处!
当然,在delphi中,我觉得更好的设计是:
TPoint = class
private
Fx,Fy :integer;
function getx:integer;
function gety:integer;
procedure setx(value:integer);
procedure sety(value:integer);
public
property X:Integer read getX write SetX;
....
var myPoint: TPoint;
...
myPoint.X := ..;
但java我看不到有支持property关键词或相关用法的,只能用SetXXX,GetXXX了,这个不能不说是个遗憾!
最后,我觉得,关键是要 善用模式 ,而不是 滥用模式,而且,使用的感觉,只能在实践中慢慢积累,当然,看看别人的书,代码,有时也能获益匪浅!
 
>>浪费文章,有关水果的简单工厂模式我已经在两个地方看见了,而且代码也抄了两遍.
如果.连简单工厂模式都不提出来,那又可能会有人说,连模式最基本的"简单工厂模式"都没,还说是什么模式的书了! 对吧?
 
感谢aiirii的精彩发言
>如果.连简单工厂模式都不提出来,那又可能会有人说,连模式最基本的"简单工厂模式"都
>没,还说是什么模式的书了! 对吧?
我只是不愿意看到基本相同的代码出现两次.作为化钱买书的人,我希望每一分钱都化的值
得.这个要求不过分吧.
>所谓设计模式,并不能让你首次编码的工作有何时间上,或代码上的收益,它的用处在调试,
>维护,功能扩展中才会慢慢体现.其中的一个好处就是减少修改代码的难度与工作量;
这话有道理,看来aiirii大虾有多年的经验.愿意的话,请留email,以后多多交流.
>如果,某一天,你需要将X的返回值从inch改为piexl,
不明白,如果说更改了x的类型,而不更改getx的返回类型,似乎更改x的类型没有什么意义,
如果同时更改了getx函数的返回值类型,所有调用者还不是要全改?
>如果,某一天,系统要求要满足X<Y,时
对于点这个对象而言,这种限制是基于某个特别应用的,不是点类型的共同特征,不应该在
点类中写这些代码.
>还有,当你调试时,如果你象知道X在什么时候变化了
这个好处是个特例,而且我一般在工程中搜索 .x 就可以找到所有对点赋值的代码.
还有,我之所以反对作者复杂点类还有如下理由:
1 点是一个简单的东西,没有必要复杂化,如果我没有记错,在delphi中,tpoint甚至不是一个
类,而是是一个结构.
2 作者的设计显然是为了封装而封装,他没有简化任何东西,当调用者操作点类时,他仍然要
知道以下事实:点有两个座标,类型是int.
 
www.jdon.com上面的东东我已经下载了,感谢ZRWeng给的地址
不过,呵呵,还没有看,按照yyanghhong大虾的看法,我还是先把书看完吧.
 
vcl的源码中确实没有多少下面这样的东东
point=class
x,y:integer;
end;
代码写多了好不好,不能简单的判定,要具体问题具体分析
 
我觉得,我们讨论的还是回到设计上的问题,就是,如果你在设计软件的结构时,预测到某一部分有变化的可能,而你当时还没把握其是如何变化的,那你就应该把模块的结构设计的比较有弹性,这样,你就在未来的维护,扩展功能中比较省心省力.当然,如果是你确认按一部分已经比较稳定了,或者出于效能的调整,可以适当做些简化;
在此,我还是强调,要善用设计模式,而不是滥用;设计不好的模式,我感觉,有时适得其反,反而更让人看不出其作者原来编码的目的性!当然,这个需要多年的实践与学习.我个人正在学习中,所以,很乐得与大家讨论相关的问题!
>>我只是不愿意看到基本相同的代码出现两次.作为化钱买书的人,我希望每一分钱都化的值得.这个要求不过分吧.
我同意你的观点,但,我觉得,有时,设计出一个读者简易能懂的模式也很难,比解决一个技术问题难多了,然后,象这些经典模式,也都有一些经典的样例,所以,你看到相似的也不足为其,再者,我觉得,重要的是作者能够让你体会到他要讲的知识.
说到这个问题,我记得看过有人说<<delphi高手突破>>其中的某些例子是抄袭的,我个人的态度,重要的是作者向大家讲授了某种知识,我也从中学到了某些知识,而且,如果不是从这本书,我可能不会学到相关的知识,作者也不是简单的Copy代码,而是增加了代码的分析,就象,linux是免费的,而redcat却可从分发中收取费用,因为,redcat从中做了增值的工作!
对于以下的几个问题,我还是说,第一,那只是举例说明;第二,那取决于你的实际需要,如果你预测到需要,象我举的可能,你就可设计中留些弹性,没有实际的项目需求,谈设计是谈不出结果的;
>>这个好处是个特例,而且我一般在工程中搜索 .x 就可以找到所有对点赋值的代码.
你那个只是静态的调试,更多的是应用在动态的调试,特别是在硬件,网络,数据库中,你很难预测到你会接收到什么数值的,因为 .x := 不简单的是一个不变的数值!
其实,你的批评,有点是"只见树木,不见森林",重点是学到设计模式的思想,而讨论其例子的细节,其实是很stupid的事.
具体到point的设计,我其实赞成你的意见,完全可实现成一个结构就可,当然,java中没有这个概念,可实现成一个简单的类;如果有更特别的需要,可再独立设计多个类出来解决!
 
我的QQ是:3241106;
我前段时间,比较有兴趣delphi7的MM,不过相关资料太少了,而且我看英文资料的速度比看中文慢了好几倍.不过,最近我是在观望的状态,不知道,会不会最后是与together集成呢?故没在上面花更多的精力了!现在,还是在深入学习java以及模式为主
 
遵从aiirii的指点,不再讨论point这样的小问题了,确实它与模式无关.
我已经看完了第三部分创建模式,感觉以前做的系统中那个唯一的当前登陆操作员可以使用
单例模式外,好像脑袋里东西还没有转清楚.
书中有一个现实的例子,取唯一编号的问题.作者分别采用了单例和多例模式来讲解,不过在
现实中我仍然会把这个功能作为datamodal的一个函数来处理,如同取得服务器时间一样.
对了,我的qq是297837,不过一般是不用的,因为我还不想失去现在的工作.我的msn是
netjianl@msn.com,一般星期6我会在线.
 
其实,如果你经常到一些比较有名的英文技术论坛,你就会发觉很多的中文书刊,只不过是将一些英文资料翻译过来而已,当然,我觉得还是应该感谢他们,毕竟,看中文的速度还是快点,而且,有些翻译的还很不错!
 
看e文要慢多了,不过有时候中文也快不了多少.特别是碰到一大堆生僻字的时候.
不知道aiirii大虾常到那些论坛,推荐一些如何?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
529
import
I
顶部