关于程序中的需求的变化,责任的分配
例:假設(shè)我是一個(gè)學(xué)術(shù)聯(lián)合會(huì)的講師。參加我的課程的人在你的課程之后還將參加其它的課程,但他們不知道下一節(jié)課的上課地點(diǎn)。我的責(zé)任之一,就是確保每個(gè)人都知道到哪里去上下一節(jié)課。
?
分析之前,我們先以結(jié)構(gòu)化的程序設(shè)計(jì)方法來(lái)嘗試解決問(wèn)題:
1.?獲取課堂上人的名單
2.?對(duì)于名單上的每個(gè)人:
a)???????? 查找他的下一節(jié)課程。
b)???????? 查找下一節(jié)課的地點(diǎn)。
c)???????? 查找去的路徑。
d)???????? 告訴他怎樣去上下一節(jié)課
?
這是理想的執(zhí)行步驟,沒(méi)有任何問(wèn)題。但是大家想想,我們真的會(huì)按照上面的流程去做嗎?
可能實(shí)際中,我們應(yīng)該會(huì)采用這種方法:把從我講課的教室到其他教室的路徑張貼出來(lái),然后告訴上我課的所有人:“我把其它的課程和相應(yīng)教室的地址張貼在教室后面了。大家按照這份表去你們的下一個(gè)教室?!薄_@樣就完事了。
?
那我們來(lái)看看這兩種方法有什么不同呢?
?????????????????? 第一種方法——對(duì)每個(gè)人都需要去明確的指出路徑。你會(huì)瘋掉!
?????????????????? 第二種方法——你給了一個(gè)告示,并期望每個(gè)人都能自己知道如何完成你的告示。
?
兩者最大的區(qū)別就是責(zé)任的轉(zhuǎn)移。在第一種方案中,我對(duì)所有事情負(fù)責(zé);第二種方案中,學(xué)生對(duì)他們自己的行為負(fù)責(zé)。兩者用于實(shí)現(xiàn)同樣的目的,但組織方式有巨大的差異。
?
?
?
?
???????? 這樣做有什么效果?我們來(lái)看新需求出現(xiàn)時(shí)會(huì)發(fā)生什么。
?
這樣子做有什么效果呢?我們來(lái)看當(dāng)有新需求出現(xiàn)時(shí)會(huì)發(fā)生什么?也就是需求發(fā)生變化時(shí)。
???????? 假設(shè)我們被告知:需要給畢業(yè)后助教的學(xué)生特殊的指令。也許他們需要在到下一個(gè)教室之前先收集課程評(píng)價(jià)并把課程評(píng)價(jià)交到辦公室。在第一種方案中,我必須修改控制程序來(lái)區(qū)分畢業(yè)和未畢業(yè)的學(xué)生,然后給畢業(yè)的學(xué)生特殊的指令。很可能我必須對(duì)程序做相當(dāng)多的修改。
???????? 但,在第二種方案中——每個(gè)人對(duì)自己的行為負(fù)責(zé)——我只需要給畢業(yè)生一個(gè)附加的說(shuō)明。然后仍然是執(zhí)行“去你的下一個(gè)教室”的動(dòng)作。
???????? 這是控制程序中重大的區(qū)別。第一種放啊,每當(dāng)出現(xiàn)一種新需求時(shí),控制程序都必須修改。
???????? 第二種方案:新類(lèi)型的學(xué)生也必須對(duì)自己的行為負(fù)責(zé)。
?
???????? 三處改變?cè)缇土诉@樣的效果:
?????????????????? 每個(gè)人對(duì)自己負(fù)責(zé),而不再有控制程序?qū)λ麄冐?fù)責(zé)。
?????????????????? 控制程序可以與不同類(lèi)型的人對(duì)話(huà)。
?????????????????? 控制程序不需要知道學(xué)生在教室之間的任何步驟。
?
?
這里引進(jìn)一些專(zhuān)門(mén)的UML術(shù)語(yǔ):
軟件開(kāi)發(fā)過(guò)程中的三個(gè)不同的視角:
???????? 概念:展現(xiàn)問(wèn)題領(lǐng)域中的概念
???????? 規(guī)格:只看軟件的接口,不要看具體的實(shí)現(xiàn)
???????? 實(shí)現(xiàn):也就是實(shí)體的代碼
從這三個(gè)角度,我們?cè)倏纯瓷厦娴哪莻€(gè)例子:
我也就是講師是在概念層上跟學(xué)生做交流。換句話(huà)說(shuō),我告訴學(xué)生“希望他做什么”,而不是“怎樣做”。但是,他們各有有各自的課和,走到下個(gè)教室的路徑也是不同的,可以自由選擇,這就是實(shí)現(xiàn)層的事情了。
???????? 在一個(gè)概念層上通信,而在別一個(gè)實(shí)現(xiàn)層上執(zhí)行。其結(jié)果就是我不需要知道具體發(fā)生了什么,只要在“概念上”發(fā)生了什么。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的关于程序中的需求的变化,责任的分配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于纠正2009年12月22日的总结的p
- 下一篇: Maximum.TV 发布西班牙语Sil