目前有20種不同的操作流程,現在隨意提出一種或多種形成乙個組合流程,每個組合流程將會都有可能發生改變,而組合流程將會組合成更多的流程,目前已知所有的流程均是同步的,是否有通用的程式設計方法實現任意流程的組合?
採用簡單的物件導向方法來解決,那麼,針對20個流程需要建立20個不同的物件,並賦予它們20種差異來表示它們的不同,實際上,這只是乙個簡單的加法,建立20個物件後,隨機從中抽取任意數量的物件,實際上只關心該物件之間最後的運算結果作為一組物件構成的乙個概念實體.
針對這樣的情況,我們可以先定義乙個類b,然後建立它的20個物件b1,b2,b3~b20,對此20個物件都建立乙個屬性進行區別,最簡單的辦法就是物件名稱,故此:
public class b
public class blist
} }
據此,我們就建立了20個物件,然後其中任意的物件會構成任意的組合,這個怎麼辦呢?我們可以採用乙個bgroup來實現這個功能
public class bgroup }
問題來了,對於任意組我們只關心它與其它組的介面運算,也就是關鍵結點,於是,我們就必須要建立乙個介面
public inte***ce icomput
計算的結果不能是void,否則就沒有意義了,有時候,一些流程的結果相當於某乙個單獨流程的結果,對於可以得到這樣的結果時,我們就可以採用流程優化,但這樣的情況,我們應該如何處理?直接使用b這個類為結果,就難以處理定義b之外的結果,所以針對此結果,我們必要要乙個特殊的實現.此時需要用到繼承:
public bresult }
我們必須要採取乙個能夠有標記它的結果的能力的東西來確定它是可優化的,或是在某種引數的情況下是可以優化的,所以,此時需要定義b也是可以計算的, 這就產生了乙個問題,即b與bgroup必須都具有result作為可以判斷是否一樣的決定,故而,我們可以得到:
public class b:icompute ; }
然後,我們必須對bgroup實現它.
public class bgroup:icompute
bgroupresult compute() }
整理一下,得到如下的**:
public inte***ce icomput
public class b:icompute ; }
public class bgroup:icompute
bresult compute() }
為了它們能夠有一致性,決定採取唯一標識,即產生類bresult如下:
public class bresult
再用乙個管理類
public class bresultmanagerobject }
就此,服務層已經寫好,我們可以採用如下的形式確定:
if (objbresultmanageobject.i***ist(bgroup,out objb)
對於優化集合列表,必須再實現:
public class optresultlist; }
也就是說,這裡我們發現,必須給b與bgroup一樣視角來處理,故而這裡可以定義乙個介面專門處理它的id,這個就是介面合併了.
public inte***ce iopt
public class bresult:icompute,iopt
public class bgroup:icompute,iopt
bresult compute() }
這樣,就可以實現為:
public class optresultlist; }
於是就大大地擴充套件了功能,最後的**,幾乎是完全在抽象層次上不依賴於任何非可定義物件的,達到直接概念上的抽象.
這只是乙個大致的做法,具體在實踐中還有許多細節,這裡只是提出乙個簡單的思路,說明,任何業務定義不應該依賴於具體的值型別或是系統其它定義,因為它們是不可擴充套件的,而全部應該採用自定義型別,系統提供的框架往往就會在框架這個層次上產生的巨大限制,自定義物件一種最佳的擴充套件方式,同時為了系統的擴充套件特性考慮,盡量也要避免使用繼承的物件,而更應該考慮從組合的方式來進行.**的復用,最好是當任何一種利用模式是一種"片斷式"地利用,而不應該完全接納,否則就很容易跌入危險的深淵.
與此同帶來的後果就是**過多,需要耗費很多時間去寫自定義的包裝物件,這也是乙個比較麻煩的事情.這樣的事情,不是能夠通過框架完全解決,需要配合開發工具進行一定的自定義物件的**生成.
乙個餘數問題的思考
剛剛在貼吧上看到乙個很簡單的演算法小問題,順便看到了很多人不同的思路。我覺得很有意思,所以也來研究一下。問題如下 一筐雞蛋 1個1個拿,正好拿完。2個2個拿,還剩1個。3個3個拿,正好拿完。4個4個拿,還剩1個。5個5個拿,還差1個。6個6個拿,還剩3個。7個7個拿,正好拿完。8個8個拿,還剩1個。...
乙個生產問題引發的思考
前言 最近碰到乙個生產問題,整個處理過程讓我不禁想起幾年前碰到的乙個類似情景,但是結果卻完全不一樣。兩次問題說大不大,說小不小。這次由於我們處理及時,大事化小小事化了而已,然而幾年前的那次事件,卻由於多方原因,鬧得挺大,驚動了某會。由此引發的一些思考和總結吧。問題回顧 排查思路 生產出現這種效能問題...
乙個面試問題的思考
有1000瓶超級名貴的葡萄酒,其中有1瓶有毒。這種毒藥很厲害,哪怕被稀釋了1000000倍還是可以毒死人的。但這個毒藥一定時間後才會毒發,時長是1個月。為了不浪費這些葡萄酒,有100個壯士決定花5周的時間將毒酒找出,他們只希望最多有10個人犧牲,你需要如何安排才能實現。toplanguage 100...