kapok
垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!
BlogJava
::
首頁(yè)
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
455 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks
<
2005年6月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(28)
給我留言
查看公開留言
查看私人留言
隨筆分類
.NET(10)
(rss)
ALL(464)
(rss)
AppFuse(20)
(rss)
CorBa(2)
(rss)
Eclipse技巧和插件等(7)
(rss)
English(10)
(rss)
ERP(3)
(rss)
HibernateAndSpring(82)
(rss)
J2EE(290)
(rss)
J2SE(27)
(rss)
JB(2)
(rss)
JBOSS(4)
(rss)
JDO(1)
(rss)
Linux(7)
(rss)
Oracle(9)
(rss)
PetStore
(rss)
Struts(9)
(rss)
UML與RUP(13)
(rss)
Web Services(8)
(rss)
Weblogic Portal(72)
(rss)
XDoclet(6)
(rss)
個(gè)人項(xiàng)目所需資料(8)
(rss)
辦公自動(dòng)化(2)
(rss)
點(diǎn)滴(1)
(rss)
程序員生活(10)
(rss)
行業(yè)知識(shí)(15)
(rss)
軟件工程和項(xiàng)目管理(32)
(rss)
軟件測(cè)試(1)
(rss)
隨手貼(5)
(rss)
面試(4)
(rss)
隨筆檔案
2005年9月 (18)
2005年8月 (39)
2005年7月 (42)
2005年6月 (49)
2005年5月 (70)
2005年4月 (116)
2005年3月 (121)
Corba
EAI
Bea Portal相關(guān)
dnnchina
Enterprise Java Research Library
xoops
泡泡-博客
Online Document
Bea Resource Center
WebLogic Online Help_ZH
Open Source
exo portal
Groller
Mule
pow2toolkit
xpetstore
開源
Portal
huihoo JSR168
灰狐
RSS Links
.Text 0.958 安裝&問題解決方案
All about Blog and RSS
RSS links
Weblogic凈化貼
Weblogic
WL Portal FAQs
WLP FAQss
不錯(cuò)的鏈接
chenyun2000
CSDN專欄作家
Eclipse Live Forum
firebody
gigix
glchengang
IT人
JavaEye
JavaPassion
michael
ODMG
oracle_tech
Pattern在線查詢手冊(cè)
querycriteria
rosen
spring reference
上海電子地圖
兔八哥
兔子
思維導(dǎo)圖
范凱的廢紙簍
工具集合
AppFuse
數(shù)據(jù)倉(cāng)庫(kù)相關(guān)
blog on dw
BRM業(yè)務(wù)參考模型
chinabi
china-bi
CNOUG DW
datawarehouse
dbazine
dmreview
DW 信息目錄
dw-institute
DWWAY
ewsolutions
flymouse
inmoncif
intelligententerprise
isomebody
IT售前論壇
rkimball
SummerRain
tdan
商業(yè)智能
頭頭腦腦
快語(yǔ)綜合
精進(jìn)門
搜索
最新評(píng)論
1.?re: Java中的URLEncoder和URLDecoder類
asdfsdf
--sadf
2.?re: 面試題,做出來3萬(wàn)月薪[未登錄]
很強(qiáng),就是這樣的邏輯@此外
--TEST
3.?re: MKS Toolkit[未登錄]
政治
--s
4.?re: Java 遠(yuǎn)程方法調(diào)用(RMI)
if (r instanceof Meeting )
這個(gè)Meeting從哪里來?
--nx
5.?re: ClearCase指南-基礎(chǔ)篇(連載一)
clearcase 可以使用clearfsimport -recurse -nsetevent進(jìn)行批量導(dǎo)入
--china-java.net
閱讀排行榜
1.?weblogic部署方法(11451)
2.?x509數(shù)字證書介紹(11432)
3.?一個(gè)很不錯(cuò)的基于角色的權(quán)限管理系統(tǒng)設(shè)計(jì)!(10491)
4.?UML的StereoType的解釋(9049)
5.?When Runtime.exec() won't (5445)
6.?完全卸載Oracle(5406)
7.?OpenLDAP快速指南(5140)
8.?如何發(fā)布和查找 WSDL 服務(wù)描述(4495)
9.?Eclipse不能自動(dòng)編譯的問題(4285)
10.?SSL※ X509(3885)
評(píng)論排行榜
1.?面試題,做出來3萬(wàn)月薪(11)
2.?x509數(shù)字證書介紹(5)
3.?OpenLDAP快速指南(5)
4.?Compiere的漢化 (5)
5.?oracle的select for update(4)
6.?使用Eclipse plus Pluto開發(fā)你的第一個(gè)與JSR168兼容的Portlet(3)
7.?迎接RFID的時(shí)代(3)
8.?簡(jiǎn)化JavaMail:小巧 Jakarta Commons-Email 簡(jiǎn)單教程(3)
9.?Visual CHM和jd2chm不錯(cuò)(2)
10.?Java 遠(yuǎn)程方法調(diào)用(RMI)(2)
Ioc吵架
http://forum.javaeye.com/viewtopic.php?t=11418&postdays=0&postorder=asc&highlight=%CF%B5%CD%B3%BC%DC%B9%B9&start=75
其實(shí)frankensteinlin說的一句話很對(duì):
引用:
這不是推卸責(zé)任嗎?
太對(duì)了!ioc,推而廣之,OO,就是一個(gè)推卸責(zé)任的藝術(shù)。
我曾經(jīng)說OO是一種政治掛帥的設(shè)計(jì)方法,就是指這種責(zé)任分配。
不能越俎代庖,能推卸責(zé)任就推卸責(zé)任,這是每個(gè)參與到這個(gè)政治游戲中的模塊都應(yīng)該遵守的。
do one thing and do one thing well.
就是說,你要做最好只作一件事,不是兩件,也不是半件。
當(dāng)你寫A的時(shí)候,你先要明確A的責(zé)任是什么。如果A唯一負(fù)責(zé)的就是創(chuàng)建B,好吧,你那么作沒錯(cuò)。
但是,我的假設(shè)是,A的職責(zé)是做另外一件事(比如出差),而買票只不過是要達(dá)到這個(gè)目標(biāo)的一種實(shí)現(xiàn)方法所需要的一個(gè)前提條件。你要是自己也負(fù)責(zé)買票,你就是做了兩件事。
當(dāng)然,什么是“一件”事的定義并不明確。如果你的買票這個(gè)動(dòng)作可以被完全封裝進(jìn)A,外界看不到,也不想看到,并且你也可以預(yù)知永遠(yuǎn)不會(huì)有其它的搞到票的方法(比如,搶票,彎腰在地上揀票,不要發(fā)票打折,中關(guān)村買假車票,買電腦附贈(zèng)車票等等),你可以選擇自己買票。(我好像曾經(jīng)就什么時(shí)候正向控制,什么時(shí)候反向給了一個(gè)大致的標(biāo)準(zhǔn)吧?)
試著從frankensteinlin的角度理解一下。
假設(shè)X是A的使用者,本來如果A這么設(shè)計(jì):
java代碼:
A:
A
(
)
{
b =
new
B
(
)
;
}
那么,我的X的代碼就是:
java代碼:
X:
A a =
new
A
(
)
;
......
這樣,只有A依賴B,X依賴A。
但是如果你要ioc,A變成這樣:
java代碼:
A:
A
(
B b
)
{
this.
b
= b;
}
此時(shí),我的X豈不是要變成:
java代碼:
A a =
new
A
(
new
B
(
)
)
;
如果這樣,不是說明A要用到B這樣一個(gè)實(shí)現(xiàn)細(xì)節(jié)暴露給X了?
而且X要使用的接口也復(fù)雜了。
如果X是老板,那么
引用:
老板不應(yīng)該事事躬親!我交給你辦至于你怎么辦我就不管了
為什么·還要我老板來給你小兵買票?到底誰(shuí)是老板啊?
而且現(xiàn)在是X依賴A, X依賴B,A依賴B但不依賴B的創(chuàng)建。依賴也沒有減少啊!
好。對(duì)frankensteinlin的理解敘述完畢。
下面·我來回答,
1。首先,還是要根據(jù)我前面給的標(biāo)準(zhǔn)分析。B是否是一個(gè)對(duì)它要實(shí)現(xiàn)的功能的一個(gè)100%標(biāo)準(zhǔn)的實(shí)現(xiàn)?它是否可能有B1, B2, ..., Bn等等不同的實(shí)現(xiàn)競(jìng)爭(zhēng)對(duì)手?
2。如果1是true,那么A能否自己對(duì)選擇那一個(gè)B做決定?A選擇B1和B2是否都能夠給出合法的語(yǔ)義,這兩個(gè)合法的語(yǔ)義是否可能不同?
A的設(shè)計(jì)者如何在不知道使用者意圖的時(shí)候決定采用哪個(gè)語(yǔ)義?
比如說出差買票。中關(guān)村買假票便宜,但是風(fēng)險(xiǎn)高;去代理點(diǎn)預(yù)定價(jià)格適中,但是要提前定購(gòu),有點(diǎn)麻煩和不靈活;想走了拍拍屁股現(xiàn)場(chǎng)買票最瀟灑,但是可能價(jià)格非常高,bill gates無(wú)所謂,小業(yè)務(wù)員就別想這么奢侈了。
其它還有買臥鋪?買軟臥?買頭等艙飛機(jī)票? 等等等等。
這些,你A同志能否都自己決定?假如你買頭等艙,結(jié)果X窮,不買單怎么辦?
還是說你A只給bill gates專職服務(wù),換個(gè)老板你就辭職?
3。說到ioc把A的實(shí)現(xiàn)細(xì)節(jié)暴露給X,這也不好說。
假設(shè)B就是一個(gè)買票的策略或者是一張票。
首先,X是否有可能本身就想控制這個(gè)買票的策略呢?它真是A的實(shí)現(xiàn)細(xì)節(jié)嗎?
比如bill gates同志,他老人家對(duì)下屬關(guān)懷備至,一人為本,一定要買最爽的頭等艙,那么這樣:
java代碼:
BillGates:
A =
new
A
(
new
BuyMostComfortableFirstClassWithStrippers
(
)
)
;
不是很自然?
其次,是有可能X不想控制這個(gè)買票策略。象你說的“老板”的情況。這個(gè)老板不在乎買票怎么買,花多少錢,就是不想過問實(shí)現(xiàn)細(xì)節(jié)的。它就是希望你把事情做好。
但是,請(qǐng)注意,在你說new A()的時(shí)候,你等于讓老板自己尋找一個(gè)能夠出差的人再下命令。老板必須認(rèn)識(shí)A,必須自己構(gòu)造A。這,這難道就爽了?
為什么老板自己不能直接說:“給我一個(gè)能出差的家伙”。這不是更爽?
看看你的X的代碼,它難道不能繼續(xù)ioc?不能繼續(xù)推諉責(zé)任?它為什么要new A()?
java代碼:
X:
A a;
X
(
A a
)
{
this.
a
= a;
}
如此,不就沒有什么實(shí)現(xiàn)細(xì)節(jié)暴露?接口不是比new A()還要簡(jiǎn)單?
這個(gè)老板做的不是更徹底?
至于用xml編程,我是不太喜歡的。xml配置的好處在于可以隨時(shí)修改,不用重編譯系統(tǒng)。這是operation上的好處,從軟件結(jié)構(gòu)上,依賴關(guān)系上,它和把依賴寫在java里沒什么不同。而且往往比java還要繁瑣,易錯(cuò),難維護(hù)。
只不過,ioc并不必然意味著xml配置。把組裝代碼寫在java里也一樣是ioc。
比如,在main()函數(shù)里,我可以自己手工組裝如下:
java代碼:
A a1 =
new
A
(
new
B1
(
new
C1
(
)
,
new
D1
(
)
)
)
;
A a2 =
new
A
(
new
B2
(
new
C2
(
)
,
new
D2
(
)
)
)
;
...
這樣,程序其它地方都避免了不必要的依賴。
確實(shí),依賴必須存在,就象你再program against interface,最終也必須new一個(gè)class一樣。ioc也不是魔術(shù),不可能把依賴變沒。
但是依賴放在什么地方就是學(xué)問了。
通過讓main()或者是任何一個(gè)其它的組裝模塊來單獨(dú)處理程序所有的依賴,我們實(shí)現(xiàn)了職責(zé)單一化。
另外,如果要改動(dòng)系統(tǒng)的行為(比如從B1變成B2,或者D2改用D1),直接改動(dòng)組裝者就可。
更重要的是,我們可以通過注射不同的零件來讓同一個(gè)組件展現(xiàn)不同的行為。
比如,上面的main()代碼構(gòu)造了兩個(gè)A對(duì)象,這兩個(gè)A對(duì)象行為不同。但是都同時(shí)存在于程序之中。
請(qǐng)問,你如果完全把new B()這種東西固定到A中去,怎么達(dá)到這個(gè)效果?
至于說配置著出錯(cuò),就全完蛋了之類的話,就有點(diǎn)不知所云了。
一個(gè)軟件系統(tǒng),如果一個(gè)模塊有bug,那么整個(gè)系統(tǒng)就是有bug。
如果你的main()函數(shù)不工作了,那么整個(gè)程序就不工作了。
你這里難道要轉(zhuǎn)移話題談fail over之類的事情了嗎?
posted on 2005-06-05 22:13
笨笨
閱讀(412)
評(píng)論(1)
編輯
收藏
所屬分類:
J2EE
、
HibernateAndSpring
、
ALL
評(píng)論
#
re: Ioc吵架
2007-09-30 15:08
gembin
Yes
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
簡(jiǎn)化JavaMail:小巧 Jakarta Commons-Email 簡(jiǎn)單教程
讀"Under the Hood of J2EE Clustering" J2EE集群
Phase
x509數(shù)字證書介紹
SSL※ X509
了解安全性斷言標(biāo)記語(yǔ)言
架構(gòu)藍(lán)圖--軟件架構(gòu) "4+1" 視圖模型
主動(dòng)對(duì)象
Profile,Stereotype,TaggedValue與OCL漫談
Drools 為你的業(yè)務(wù)邏輯提供框架(翻譯)
Powered by:
BlogJava
Copyright © 笨笨
主站蜘蛛池模板:
国产一区二区免费在线
|
国产精品亚洲二区在线
|
五月天婷亚洲天综合网精品偷
|
亚洲天堂电影在线观看
|
免费专区丝袜脚调教视频
|
美女又黄又免费的视频
|
亚洲国产精品国自产电影
|
国产在线19禁免费观看
|
免费黄色福利视频
|
jizz免费观看
|
亚洲熟妇无码一区二区三区
|
一区二区免费视频
|
在线精品自拍亚洲第一区
|
亚洲综合自拍成人
|
亚洲综合色区在线观看
|
成年女人午夜毛片免费视频
|
免费一级特黄特色大片
|
亚洲午夜国产精品
|
亚洲成a人片在线观看无码专区
|
免费大黄网站在线观
|
色噜噜狠狠色综合免费视频
|
亚洲精品你懂的在线观看
|
蜜臀91精品国产免费观看
|
精品无码AV无码免费专区
|
在线人成免费视频69国产
|
一区二区免费电影
|
一级成人生活片免费看
|
无遮挡呻吟娇喘视频免费播放
|
亚洲成av人在线观看网站
|
中文字幕 亚洲 有码 在线
|
亚洲天堂一区二区三区四区
|
911精品国产亚洲日本美国韩国
|
亚洲AV无码乱码国产麻豆
|
亚洲精品国偷自产在线
|
亚洲成色WWW久久网站
|
无码乱人伦一区二区亚洲
|
图图资源网亚洲综合网站
|
亚洲AV综合色区无码另类小说
|
国产亚洲精品a在线观看app
|
亚洲国产精品无码久久久秋霞2
|
亚洲AV无码专区国产乱码4SE
|