作者Killercat (杀人猫™)
看板java
标题Re: [J2SE] 谈谈Service的设计
时间Fri Jul 19 15:43:40 2013
※ 引述《abola921 (坟都买不起了还想买房)》之铭言:
: ※ 引述《Killercat (杀人猫™)》之铭言:
: : http://rayer.logdown.com/posts/32096-talk-about-service-design
: 我真的很认真的把全文看完了
: 我没理解错的话应该是使用 getService 去取得一个已存在的 service物件
: (也就是Singleton的方式)
: 用static的方式去实贱,这点并不意外,方便又快速
谢谢把这篇文章看完的版友,因为这篇真的有够长+非常多的code =P
不过在这里我想强调的东西并不是怎麽存取一个Singleton。
而是一个老问题:型别安全。
重点在於这种方法取出来的物件不用转型(也不能转型)
而且能被Eclipse的auto complete正确的指向正确的型别
(请见下面动手玩的code 很有趣喔 XD)
Spring...其实我个人是相当反Spring的,肥大,不好维护
我也知道@Autowire真的很方便,不过Spring...恩,见仁见智 XD
: 不过老问题: thread safe, 最後也会走上老解法: ThreadLocal
: 但你也提到了Spring,那为什麽不直接宣告成Spring Service
: 预设也是Singleton的方式存在,而且不会有thread safe的问题
: 就只是差在,要多做一个强制转型
: 我会比较建议直接宣告成Spring Service,在你有include spring的前提下
谢谢你的看法。不过,Service设计上这边提到的相当少,我也有打算再写一篇
关於Service其他方面的做法。比方说Thread Safe。事实上,我们目前专案的
Service有颇严格的field控管,我也觉得这不是很好的做法,我有打算用C++的pImpl
方式来解决这个问题(编译防火墙),彻底做到把所有的field圈起来.
http://tw.myblog.yahoo.com/jw!II2iRHiVEQJ0_2kIG.YEQcfMM2M-/article?mid=10&prev=11&next=9
不过这篇的确就是为了消灭强转而存在的,只要是「使用者工程师」的强转
就一定会有出错的机会。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.124.251.135
1F:推 swpoker:(Test2)((Object)getService(Test.class)) (大误!!) 07/19 16:52
2F:→ Killercat:这种一心寻死的engineer神仙难救 XD 07/19 16:55
3F:→ swpoker:直接复制spring beanfactory来用就好拉 07/19 17:34
4F:→ Killercat:我讨厌Spring有个很重要的原因就是要额外写xml OTZ... 07/19 17:37
5F:→ Killercat:xml == 容易typo == 执行其花资源检查 07/19 17:38
6F:→ swpoker:阿~复制spring的架构,然後只复制自己要的(code)就好..(迷) 07/19 17:42
7F:→ Killercat:BeanFactory本身就是靠xml来peek class内部的啊 XD 07/19 17:43
8F:→ swpoker:那是实作拉~实作可以随便做~重要可是架构跟样式拉 07/19 17:44
9F:推 phstudy:spring设定档不一定要用xml 07/19 17:45
10F:→ Killercat:我回去翻翻好了 不过他看起来是外部读入class架构说... 07/19 18:06
11F:推 luoqr:要是我不用spring,会在put Service时 put Service Proxy~XD 07/19 20:47
12F:→ Chikei:Spring 3.2+ or Google Guice 07/19 21:09
13F:→ Killercat:谢谢楼上 不过dependency injection目前不太想考虑 ^^; 07/20 02:30