[J2SE] 談談Service的設計
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
我相信應該很多人也對這方法跟特性很陌生,順便分享一下
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.251.135
→
07/19 14:47, , 1F
07/19 14:47, 1F
→
07/19 15:33, , 2F
07/19 15:33, 2F
推
07/21 06:33, , 3F
07/21 06:33, 3F
推
07/22 08:39, , 4F
07/22 08:39, 4F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 9 篇):