作者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
推 swpoker:(Test2)((Object)getService(Test.class)) (大誤!!) 07/19 16:52
→ Killercat:這種一心尋死的engineer神仙難救 XD 07/19 16:55
→ swpoker:直接複製spring beanfactory來用就好拉 07/19 17:34
→ Killercat:我討厭Spring有個很重要的原因就是要額外寫xml OTZ... 07/19 17:37
→ Killercat:xml == 容易typo == 執行其花資源檢查 07/19 17:38
→ swpoker:阿~複製spring的架構,然後只複製自己要的(code)就好..(迷) 07/19 17:42
→ Killercat:BeanFactory本身就是靠xml來peek class內部的啊 XD 07/19 17:43
→ swpoker:那是實作拉~實作可以隨便做~重要可是架構跟樣式拉 07/19 17:44
推 phstudy:spring設定檔不一定要用xml 07/19 17:45
→ Killercat:我回去翻翻好了 不過他看起來是外部讀入class架構說... 07/19 18:06
推 luoqr:要是我不用spring,會在put Service時 put Service Proxy~XD 07/19 20:47
→ Chikei:Spring 3.2+ or Google Guice 07/19 21:09
→ Killercat:謝謝樓上 不過dependency injection目前不太想考慮 ^^; 07/20 02:30