Re: [J2SE] 談談Service的設計

看板java作者 (有些事,有時候。。。)時間12年前 (2013/07/20 10:06), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串7/9 (看更多)
※ 引述《Killercat (殺人貓™)》之銘言: : http://rayer.logdown.com/posts/32096-talk-about-service-design : 因為文很長,加上裡面有無敵多的code : 所以我直接貼我logdown連結 : 絕對不是要推銷自己blog喔(本來就沒啥人氣的 XD) : Logdown能用Markdown真的是太對我胃口了,唯一的缺憾大概就是沒footnote : 所以前兩天就決定慢慢把技術文章轉過來 : 這篇將會在一個月之後的某個技術討論會議拿出來聊,也請大家幫我看看 : 這技術上到底有什麼優缺點 : 可以直接執行的source code在整篇文章最下面 : 裡面包含了自己動手玩。 : 這篇ptt post我想聊點其他東西,跟這個有點關係,可以算是這個技術的起頭 : 我自己工程師生涯大概也有9年了,我算是比較堅持強型別以及型別安全的。 : 也許是因為我主攻的是C++,C++對這個的技術(Technique)是相當重視的, : 而JavaScript則是另外一種極端,Obj-C早期也是完全沒型別安全概念 : Java整體來講開發者的習慣是比較偏中庸,前面有人提到Spring,其實Spring : 嚴格講起來也有很多型別問題,更不用說很多系統中充斥著父轉子子轉父 : AService serv = (AService)getSystemService(SERVICEA_CONTEXT); : 或者這種東西(壞習慣的人真的很多) : if(a instanceof AService) : .......; : 由於我個人是比較堅持型別安全,編譯器能幫我們檢查的時候我絕對不會執行期檢查 : 在我還在寫C++的時候,也因為template的使用跟資深前輩迭起衝突 : (template可以鎖定型別,而且能做出一些如Policy Based Design的設計) : 在Java其實也常常會碰到自己寫的Generic卻發現別人根本看不懂的窘況 : (老實講我自己私底下會認為,都職業級了,這種東西跟Design Pattern至少都要能看 : 懂吧?純Technique的東西不能拿看不懂當借口) : 我以前也常常去塗改別人obj-c id傳來傳去的code,如果這個放在java的話,就是把 : Object傳來傳去,然後再轉型 -- instanceof? 硬轉?whatever... 這種code我想在 : 看這個板有點年紀的人應該看到都會想罵。 : @Override : public Object startService(Object parameter); : 這種code其實職業生涯碰過許多次,總會說阿parameter每個service都長得不一樣啊 : (聽說有種做法叫做生成模式?沒考慮過用Factory or Builder?) : 全面改寫很麻煩因為它已經是interface的一部分了啊 : (聽說這interface就是嫌麻煩的人搞出來的飛機) : 反正這種東西該怎麼轉型勢教育訓練該做的事情啊 : (這個真的聽了很無言都不知道怎麼反駁的好 XD) : 後來才慢慢體會到,所有事情都自己做好,別人不用轉型的話 : 整個code都會清爽很多。Framework層先做掉,讓對方用的方便,自然就會這樣用 : 這篇blog文章也請大家不吝指教一下,感謝 =P : 我相信應該很多人也對這方法跟特性很陌生,順便分享一下 感覺起來,只是一種實作的 style 以我寫過的東西,也偏好不需要強制轉換 https://github.com/qrtt1/jplurk-oauth/wiki /* create oauth config */ PlurkOAuth auth = new PlurkOAuth( prop.getProperty("appkey"), prop.getProperty("appsecret"), prop.getProperty("token"), prop.getProperty("tokensecret")); auth.using(Timeline.class) .plurkAdd("Hello JPlurk-OAuth", Qualifier.SAYS); 俺傾向將這篇文章看為 api 設計風格。 再配合 fluent style 使用起來就更順手: http://www.martinfowler.com/bliki/FluentInterface.html 例如,前一陣子包裝的 mail builder 像這樣: public class MailBuilderTest { @Test public void testMailBuilder() throws Exception { MailBuilder builder = new MailBuilder(); builder.from("me@mail.com").to("you@mail.com") .withTitle("hate you").hasContent("damn it"); builder.send(); Mailbox mailbox = Mailbox.get("you@mail.com"); Message message = mailbox.get(0); assertEquals("me@mail.com", message.getFrom()[0].toString()); assertEquals("hate you", message.getSubject()); assertEquals("damn it", message.getContent()); } } 無論是 api 實作或是 design 運用,俺比較秉持著 「爽到你,甘苦到我」的原則,把難搞的,容易寫錯的都封裝起來 亂呼叫的、不滿足的得有提示,使用流程、方式不能太難理解。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.119.13

07/20 11:51, , 1F
是,這題目寫Service設計是有點錯誤了 XD
07/20 11:51, 1F

07/20 12:37, , 2F
07/20 12:37, 2F
文章代碼(AID): #1HwV2k_R (java)
討論串 (同標題文章)
文章代碼(AID): #1HwV2k_R (java)