将MS的PetShop3.2进行了比较大的重构
1、重构原因:
微软的PetShop作为标准企业应用示例中的一个已经推出了很多个版本,目前的3.2版本和以前的版本相比较,平心而论确实有了很大的提高(1.0版本无论是体系结构还是代码编写都足可以作为一个很好的反面示例,呵呵)。但是还是非常的不理想,很多.net程序员居然把它视为以面向对象方式开发的.net应用的经典。为了纠正目前这种落后的实现方式(意识),做了这次重构,希望可以给大家做一个参考,实现的很仓促,肯定还有很多的不足,大家多提意见继续完善这个例子。(不过目前我觉得由于这个例子太过简单,不能真正做到示例OOD、OOP的目的。)
2、重构内容:
1、数据访问层由于改用nhibernate实现比重构前减少了1000多行代码。重构前支持oracle和MsSql,重构后可以支持任意的数据库。
2、业务逻辑层由领域模型,取代了重构前的“贫血的实体类” + “控制类”模式。
3、业务逻辑层不再直接依赖于COM+,更易于测试。(这个DEMO没有加入单元测试)
注:为了增强说明性和更好的进行对比,保持了原有的表示层和关系模型。实际上,我觉得最应该重构的就是它的关系模型,不过一个比较“烂”的关系模型可能会更好的示例nhibernate吧,呵呵。重构后的代码总量比重构前减少了三分之一。
3、系统环境:
1、.net1.1
2、nant0.85 + nantcontrib-0.85-rc1(这个我没放到包里,自己下载吧)
3、log4net1.2.0.30714
4、nhibernate-beta-0.6
5、sping.net0.6(不是目前官方release的那个,是通过目前cvs下载编译的。API和配置文件和以前都有些变化)
4、项目目录:
BLL: Domain Model
DAO: DAO
Web: 表示层
TransHelper:提供分布式事务支持能力(实现方式请参考 http://www.gotdotnet.com/team/dbox/default.aspx?key=2004-07-12T08:40:44Z)
注:其余目录有些是遗留的,我觉得还有用的就没删。
其他:
1、这个项目是用SVN管理的,如果想看到重构的“脚印”,可以给我发email(agilecoder@sina.com)
2、向大家推荐一款 NHibernate Query Analyzer,这个项目还处于发展中不是很成熟,但是想法很好。先加载好各种配置文件,然后你就可以随便写HQL语句了,它会自动即时生成SQL语句,即时提供错误信息。执行时会给出SQl Result(记录集)和HQL Result(对象图)。降低了编写和优化HQL的门槛和难度。( http://developer.berlios.de/projects/nqa/ )这个项目还是用SVN管理的,我很喜欢。
下载地址:http://forum.javaeye.com/viewtopic.php?p=59528
问题点数:200、回复次数:97Top
1 楼winxieddd(一剑飘香)回复于 2005-02-04 13:46:54 得分 10
强就一个字。Top
2 楼lihao9806(李昊)回复于 2005-02-04 13:53:19 得分 0
忘了说了javaeye这个论坛需要先登录,才能看到下载链接。没说清,给大家带来不方便了。
下载不了的可以留下email,我如果可以的话就直接发给大家。Top
3 楼winxieddd(一剑飘香)回复于 2005-02-04 13:58:25 得分 0
不行呀,注册了但登陆不了,你还是发给我一分吧,谢了:)
winxie@163.comTop
4 楼happyfish21cn(小鱼儿)回复于 2005-02-04 17:59:07 得分 0
happyfish21cn@yahoo.com.cnTop
5 楼liulxmooo(娃娃)回复于 2005-02-04 18:02:14 得分 10
upTop
6 楼wj2929(Rěй)回复于 2005-02-04 18:04:00 得分 10
偶的
wj29292002@163.com
先谢拉Top
7 楼yizhixiaozhu(天啦,手都起茧了)回复于 2005-02-04 22:10:58 得分 10
楼主强
不过不厚道
给个地址下载啊,如果没有办法的话 就发邮件把 ^_^
thisemail#21cn.comTop
8 楼3gold(新丁)回复于 2005-02-04 23:56:32 得分 0
楼主还是给个下载地址吧Top
9 楼AllenTing(今天你GC了吗???)回复于 2005-02-05 00:22:31 得分 10
JF!
谢了!!
ading_dance@163.comTop
10 楼v192(人都是環境逼出來的,所以往死裏逼我吧)回复于 2005-02-05 05:16:09 得分 10
顶死你!不给我发我就和你急哦,我就是郁闷.Net下面的框架模式比Java原始落后太多,现在天天看NHibernate和Spring.Net,就是发愁没有好的例子参照!!!太及时了!!!
61718@qq.comTop
11 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-02-05 07:28:58 得分 10
yzhu@ubisoft.com.cn
谢谢Top
12 楼gengwei80(书生)回复于 2005-02-05 08:22:32 得分 0
gengwei_80@163.com楼主强,谢谢
Top
13 楼lihao9806(李昊)回复于 2005-02-05 08:45:57 得分 0
下载地址:http://forum.javaeye.com/viewtopic.php?p=59528
冤枉啊!我给下载地址了啊。我只是希望大家从javaeye去下载而已,不论有什么问题都可以在那里讨论。
楼上的都发了,敬请查收。Top
14 楼haoco()回复于 2005-02-05 08:55:36 得分 0
upTop
15 楼ylfzly()回复于 2005-02-05 10:37:34 得分 0
ylwlf@163.com
谢谢Top
16 楼gcs925(竹里坐消无事福,花间补读未完书)回复于 2005-02-05 13:13:49 得分 0
......Top
17 楼chinacc(chinacc)回复于 2005-02-05 14:11:50 得分 0
给我一份吧。谢谢。
chinacc@21cn.comTop
18 楼freehul(Leo)回复于 2005-02-05 16:33:50 得分 0
freehul@yahoo.com.cnTop
19 楼Godshow()回复于 2005-02-05 16:39:47 得分 0
向楼主学习.Top
20 楼saucer(思归)回复于 2005-02-05 20:47:27 得分 100
做法值得称许,用多种方法实现一个应用并做思考/比较,本身就是一种成熟的标志
我的观点是,微软的PETSHOP的实现的目的是,在当前.NET的框架,类库下,怎么手工实现分层应用,怎么设计持久层的细节,怎么做事务,业务层与持久层怎么交互,表现层怎么跟控制层交互,等等,这对初学者来说,是个很好的介绍。
我同意,他们的实现中有不少需要完备之处。楼主把2层都做了大改动,基本上就是重写了,还称为“重构”,则有点那个。其实楼主没必要局限于微软的PETSHOP实现,应该从原来的J2EE的蓝本出发,用楼主上面提到的技术完全重新实现PETSHOP,也许更可体现这些技术的好处。
但需要指出的是,象NHibernate/Spring.Net等技术还是在Beta甚至Alpha阶段,在正式production项目中,千万慎用Top
21 楼nk912114(ktf)回复于 2005-02-05 21:50:28 得分 0
呵呵,给我发一份
谢谢
email: nk912114@163.comTop
22 楼renaski(洛林)回复于 2005-02-05 21:59:22 得分 0
给我发一份
msn:renaski@hotmail.comTop
23 楼lihao9806(李昊)回复于 2005-02-06 08:56:08 得分 0
同意思归的意见,称为重构确实是有些不妥。但是使用O/R Mapping的时候,最重要的不是如何编写配置文件,API如何使用。最重要的是OOD!它需要有一个好的对象模型和关系模型才能发挥最大的效用,否则不如不用。所以我必须同时将BLL和DAL做出比较大的改动。如果只涉及DAL,则会带来很大的误解。实际上,这种误解已经开始存在了。这个问题在javaeye上已经有了讨论。
之所以用PetShop开刀,是因为在.net社区了解PetShop的人相对较多,大家容易接受和比较。
确实如果对nhibernate和spring不很熟悉,建议在实际项目中暂不要使用!
我说的“MS的实现不好”,这话收回,呵呵。我考虑的比较片面了。Top
24 楼yhwebus(小鸿)回复于 2005-02-06 09:03:00 得分 10
支持一个
Spring.NET和NHibernate正是我最近的研究重点
希望作者发我一份 evanyuan@ozzo.comTop
25 楼wildfishchin(wildfishchin)回复于 2005-02-06 09:46:29 得分 0
也给我一份,谢谢,chenwenxi@penavicoxm.comTop
26 楼xiaojun153(狼)回复于 2005-02-06 10:46:28 得分 0
给一份研究吧,谢谢jeff_cao_79@hotmail.comTop
27 楼bannerruby(Banner)回复于 2005-02-06 10:54:39 得分 0
也给我一份,bannerface@sina.com.
Tks, :)Top
28 楼CodingPCPiG(会Coding的猪)回复于 2005-02-06 12:41:26 得分 10
楼上的真是奇怪,楼主不是给了下载地址了吗?晕,就是需要在http://forum.javaeye.com这先注册一下而已Top
29 楼lihao9806(李昊)回复于 2005-02-07 09:13:57 得分 0
楼上的都发了。
下载地址已经给了,大家尽量去下载吧。
论坛毕竟是讨论问题的地方嘛!Top
30 楼snowpine999([彼岸烟花][当你看到☆河灿烂,可会想起我?])回复于 2005-02-07 14:35:09 得分 0
upTop
31 楼fds2003(Hunter)回复于 2005-02-07 14:59:21 得分 0
给我也发份!!fds2003@163.comTop
32 楼nga96(因为我笨,所以努力。陈勇华)回复于 2005-02-12 14:09:37 得分 0
重构与重写有什么区别?解释一下Top
33 楼gwallan()回复于 2005-02-12 17:04:41 得分 0
UPTop
34 楼whmjw(明年今日十年之后)回复于 2005-02-13 23:47:41 得分 0
楼主,打不开呀:)Top
35 楼floer(floer)回复于 2005-02-15 04:26:11 得分 0
麻烦给我发一份
mailover@gmail.comTop
36 楼amendajing(学习,是个漫长的旅途!)回复于 2005-02-15 14:33:09 得分 0
upTop
37 楼ssdjmcj8048(就是俗)回复于 2005-02-17 10:39:19 得分 0
搂住同志在哪里工作啊?很想和你合作阿Top
38 楼yellowhwb(天の羽)回复于 2005-02-17 21:52:36 得分 0
jfTop
39 楼athossmth(athos)回复于 2005-02-17 22:00:48 得分 0
顶,学习Top
40 楼lihao9806(李昊)回复于 2005-02-18 08:56:25 得分 0
1、感兴趣的同志去下载吧,我不发了。
TO nga96: 根据重构定义,对于BLL和DAL层来说是重写,对于整个项目来说是重构。
TO whmjw(明年今日十年之后) : 什么打不开???
TO ssdjmcj8048(经营和挣钱): 好呀!我在天津。正需要一份不用干活又能赚钱的工作呢,呵呵~~~~Top
41 楼xjking0331(Michael J)回复于 2005-02-18 17:10:23 得分 0
不行啊,我也是下载不了
给我发一份吧 xjking@mail.biti.edu.cn 谢了!~Top
42 楼redbb(....DB & DEV....抵制日货,人人有责...)回复于 2005-02-19 13:39:48 得分 0
markTop
43 楼EdmondWang(Edmond_Wang)回复于 2005-02-19 15:24:54 得分 0
up
edmond@newv.com.cnTop
44 楼smx717616(又笨又不努力)回复于 2005-02-20 12:47:45 得分 0
哦的
smx_717616@163.com
谢谢。Top
45 楼philipsslg(刮开中大奖(█))回复于 2005-02-21 15:46:29 得分 0
LoveCherry(最讨厌你们这些要代码的了,一点技术含量都没有) 比较幽默,自己在要代码。Top
46 楼sun5000(★★★★★★)回复于 2005-02-22 10:02:56 得分 0
我要一份,谢谢!
下不了啊
szseesea@163.comTop
47 楼mich1234(小小)回复于 2005-02-22 10:37:35 得分 0
下载了
谢谢楼主Top
48 楼lihao9806(李昊)回复于 2005-02-22 13:44:32 得分 0
怎么会下载不了呢?
很多人都能下呀!
什么原因不能下载?Top
49 楼l3300(小沙子)回复于 2005-02-22 13:49:59 得分 0
下载
学习Top
50 楼Miracle(新一代的开山怪)回复于 2005-02-22 14:19:38 得分 0
用了NHibernate,就不能叫重构了,应该叫重写。
不过楼主够强,帮顶一个。
p.s.好久没看,NHibernate居然有0.6版发布了。Top
51 楼lihao9806(李昊)回复于 2005-02-22 20:28:57 得分 0
我在前面的帖子已经说了。至于是重构还是重写,其实要看从哪个层次来说。
重构定义:在不破坏可观察功能的前提下,对代码做出修改,改进程序的内部结构。Top
52 楼lmzou(狂人)回复于 2005-02-22 20:34:11 得分 0
static ObjectFactory() {
ctx = new XmlApplicationContext( "assembly://PetShop.DAO/PetShop/objects.xml" );
}
出错了!
调用的目标发生了异常。Top
53 楼lihao9806(李昊)回复于 2005-02-22 20:53:21 得分 0
这行代码不会有错的。把堆栈信息帖上来。你这样我不会知道是什么问题。Top
54 楼xiaohuan(屎蜢)(球球的)回复于 2005-02-23 14:40:08 得分 0
收藏先Top
55 楼xiaohuan(屎蜢)(球球的)回复于 2005-02-23 16:55:40 得分 0
学习楼主的精神Top
56 楼xjbx()回复于 2005-02-23 17:25:23 得分 0
谢谢!
xjbnet@163.netTop
57 楼jialiang(≈≈逆水行舟≈≈)回复于 2005-02-23 17:55:58 得分 0
谢谢!学习学习
jialiang@mail.csdn.netTop
58 楼lihao9806(李昊)回复于 2005-02-25 20:33:39 得分 0
都说了N遍可以下载,拜托不要发邮件地址了。 :)
实在下不了的给我发邮件好了。
这里的人气很好,可是回帖还不如javaeye呢。Top
59 楼johlon(jhl)回复于 2005-02-28 15:19:33 得分 0
static ObjectFactory() {
ctx = new XmlApplicationContext( "assembly://PetShop.DAO/PetShop/objects.xml" );
}
出错如下:
未处理的“System.Reflection.TargetInvocationException”类型的异常出现在 mscorlib.dll 中。
其他信息: 调用的目标发生了异常。Top
60 楼lihao9806(李昊)回复于 2005-03-01 09:11:43 得分 0
不好意思,应该是编译的问题。
我一直用NAnt编译,你用VS编译时它会自动将资源文件添加一个命名空间作为前缀(项目属性里设置)
1、先运行TransHelper里的NAnt脚本文件(PetShop要用)
2、再运行根目录下的NAnt脚本文件。
3、打开浏览器观看。Top
61 楼ZeroGong(希光)回复于 2005-03-01 09:26:33 得分 0
给我一份,ZeroGong@163.comTop
62 楼bfwqc(丢在风中)回复于 2005-03-02 09:17:10 得分 0
有谁都到了,发给我一份啊。bfwqc@163.comTop
63 楼3gold(新丁)回复于 2005-03-02 09:24:16 得分 0
强!!!Top
64 楼benxibing1981(人生如梦)回复于 2005-03-02 17:24:36 得分 0
给我一份 benxibing1981@163.comTop
65 楼lengfeng8866(公孙恋雪(专心学习WEB开发))回复于 2005-03-03 08:44:53 得分 0
牛就一个字!Top
66 楼anan8210(天蝎座男子)回复于 2005-03-08 16:41:05 得分 0
给我一份 shenm@shanghai-air.comTop
67 楼doutiger(斗虎)回复于 2005-03-08 22:20:36 得分 0
给我一份,doutiger@zj165.com,谢谢Top
68 楼FengYunBingYu(风云冰雨)回复于 2005-03-09 20:20:51 得分 0
xubinhui2001@163.com
谢谢Top
69 楼jonescheng(小块头无大智慧)回复于 2005-03-10 10:04:36 得分 0
真的是很不错阿。楼主。。Top
70 楼lihao9806(李昊)回复于 2005-03-10 13:02:45 得分 0
谢谢大家的支持!
我现在很想搞一个.net方面的研究和讨论各种开源框架技术的中文论坛呢。
不知道有兴趣的人多吗?Top
71 楼flyingonnet(即将离开)回复于 2005-03-10 22:42:23 得分 0
微软的经典通常被很多微软的人称为垃圾。Top
72 楼user918(心风)回复于 2005-03-11 13:30:45 得分 0
来晚了么?楼主也麻烦发一份给我吧。我正在学习中。user918@163.comTop
73 楼o2delphi(花满楼)回复于 2005-03-12 02:03:04 得分 0
“我现在很想搞一个.net方面的研究和讨论各种开源框架技术的中文论坛呢。”
支持楼主搞这样的论坛。Top
74 楼EdmondWang(Edmond_Wang)回复于 2005-03-23 14:16:59 得分 0
static ObjectFactory() {
ctx = new XmlApplicationContext( "assembly://PetShop.DAO/PetShop/objects.xml" );
}
出错如下:
未处理的“System.Reflection.TargetInvocationException”类型的异常出现在 mscorlib.dll 中。
其他信息: 调用的目标发生了异常。
按照楼主的方法试了,不管用。还是报这个错Top
75 楼skytear()回复于 2005-03-23 14:22:11 得分 0
学习Top
76 楼vzxq(灵感人)回复于 2005-03-23 14:28:19 得分 0
vzxq@163.comTop
77 楼gkwww(奔放)回复于 2005-03-23 23:13:29 得分 0
gkit@163.com
谢谢你Top
78 楼xjbx()回复于 2005-03-24 18:11:41 得分 0
xjbnet@162.net
谢了Top
79 楼zjz678(尘封)回复于 2005-03-26 11:16:24 得分 0
Java视线论坛注册了用户,但是登录不了,麻烦给我发一份:
zjz7411@sina.com
Top
80 楼athossmth(athos)回复于 2005-03-27 12:32:25 得分 10
>>谢谢大家的支持!
>>我现在很想搞一个.net方面的研究和讨论各种开源框架技术的中文论坛呢。
>>不知道有兴趣的人多吗?
我很感兴趣……不过只是学习的兴趣……看了楼主的程序,感慨自己要学习的还很多很多……多谢楼主分享!Top
81 楼kirinboy(麒麟.NET)回复于 2005-03-27 15:04:40 得分 0
顶
kirinboy@163.com
多谢Top
82 楼seayar(习习)回复于 2005-04-08 09:09:05 得分 0
好Top
83 楼xubinhui(东方未名)回复于 2005-04-16 10:40:58 得分 0
多谢:xubinhui2001@163.comTop
84 楼gaohaidong(高海东)回复于 2005-04-18 20:42:37 得分 0
一个字
强
不过最好吧完整的项目提供下载Top
85 楼gaohaidong(高海东)回复于 2005-04-18 20:43:30 得分 0
PetShop3.2最新版本的下载地址?Top
86 楼yhcnux()回复于 2005-04-19 21:25:57 得分 0
谢谢大家的支持!
我现在很想搞一个.net方面的研究和讨论各种开源框架技术的中文论坛呢。
不知道有兴趣的人多吗?
----------------------------------------------------------------
很支持这个想法,其实我在国内一直没有看到一个像javaeye那样,讨论问题能达到那种深度的论坛。。。。其实dotnettools不错(ccboy那个),可惜人气就差了些,而且现在更少有发文了,版面也少了点。楼主如果有想法,我想可以和ccboy联系一下,大家一起努力,把dotnettools办成一个dotnet方面的高级论坛,像javaeye那样的定位。Top
87 楼gyf19(秋天的云)回复于 2005-04-19 21:43:57 得分 0
强Top
88 楼realljx(抵制日货 功在千秋)回复于 2005-04-21 09:02:17 得分 0
QuitGame@gmail.com
多谢楼主 希望学习一下Top
89 楼kv4000(ABCD(A Brave Csharp Developer))回复于 2005-04-30 11:00:11 得分 0
看到强贴,做个记号
麻烦楼主发一份
finesite@163.comTop
90 楼singlepine(小山)回复于 2005-04-30 12:49:40 得分 0
singlepine@sina.com
强啊.Top
91 楼fengyi999(老多)回复于 2005-05-02 14:20:31 得分 0
jfTop
92 楼claus2001(古风)回复于 2005-05-02 18:46:20 得分 0
markTop
93 楼wwh207(活死人)回复于 2005-05-03 02:26:55 得分 0
wwh207@tom.comTop
94 楼smartcoffee(先天性缺乏人民币)回复于 2005-05-19 11:02:44 得分 0
markTop
95 楼www141421com(lifergb)回复于 2005-05-25 12:15:35 得分 0
lifergb@hotmail.com
谢谢Top
96 楼sfanpu(Erick Shuai)回复于 2005-05-26 12:00:07 得分 0
嘿嘿,想看看Top
97 楼magiccoder(或许..未必..不过..)回复于 2005-05-26 12:29:22 得分 0
leon-zxd@163.com
thanksTop





