|
多少次有人問(wèn)我如何構(gòu)建一個(gè)比較好的類階層次,如何使用面向?qū)ο筮M(jìn)行設(shè)計(jì),或者問(wèn)為什么我看了那么多面向?qū)ο蠛驮O(shè)計(jì)模式的書(shū)一到使用的時(shí)候卻總是寫出面向過(guò)程的代碼。每當(dāng)我碰到這些問(wèn)題的時(shí)候我總是回答,其實(shí)我也不知道。真的,其實(shí)我也不知道。
雖然我總是張口閉口面向?qū)ο螅偸强吹揭粋€(gè)問(wèn)題后就談這個(gè)有點(diǎn)XXX模式的影子,但大部分時(shí)候碰到一個(gè)問(wèn)題我還是一片空白,不知道如何去分析設(shè)計(jì)和實(shí)現(xiàn)出好的面向?qū)ο蟆K裕抑幌胝務(wù)勎沂侨绾螌?shí)踐面向?qū)ο蟮模@對(duì)我自己有用但不一定對(duì)你有用。嗯,回到正題。
回顧編程方法的發(fā)展史,我想不外乎兩個(gè)字:抽象。
從最早的匯編語(yǔ)言中使用的子例程到結(jié)構(gòu)化編程,然后到面向?qū)ο蟆⒚嫦蚪M件以及面向服務(wù)。我覺(jué)得都是不斷地提升抽象的層次。所以編程方法沒(méi)有好壞,只有適合不適合。在匯編時(shí)代問(wèn)題規(guī)模都很小,所以我們需要的抽象能力不需要太強(qiáng)。而現(xiàn)代的軟件項(xiàng)目,問(wèn)題的規(guī)模非常龐大,需要考慮的事情非常多(雖然純粹的技術(shù)含量不一定有匯編時(shí)代的高),我們就必須使用抽象層次更高的方法來(lái)匹配我們的問(wèn)題規(guī)模。
面向?qū)ο缶幊谭椒ǖ某霈F(xiàn)也不外乎如此,所以我們?cè)谑褂妹嫦驅(qū)ο蠓椒ㄩ_(kāi)發(fā)的時(shí)候一個(gè)目的就是要提升抽象層次(比如現(xiàn)在由有人提出面向?qū)ο笠呀?jīng)不足以匹配并行軟計(jì)算的抽象層次,所以不再教授面向?qū)ο螅D(zhuǎn)而教授函數(shù)編程)。
而我覺(jué)得提升抽象層次的一個(gè)好方法就是用代碼與人交談,用代碼來(lái)表達(dá)你的思想,在代碼中形成一個(gè)個(gè)“概念”,或者說(shuō)代碼就是用來(lái)傳遞知識(shí)的。我將概念二字加上引號(hào)并加粗是有特別強(qiáng)調(diào)的意思,這個(gè)在后文我會(huì)談?wù)勈裁词沁@里所說(shuō)的概念。我不想在表面文字上談?wù)撎啵覀儊?lái)實(shí)踐吧。
注意,本文代碼僅僅為了說(shuō)明一些問(wèn)題或現(xiàn)象,并不考慮業(yè)務(wù)上的合理性,讀者可以自行分辨然后拿自己的業(yè)務(wù)代碼進(jìn)行思考。
方法的參數(shù)
不知道你寫過(guò)或見(jiàn)過(guò)下面的代碼沒(méi)有:
bool IsValid(string userName, string password, string email, int status);
it知識(shí)庫(kù):面向?qū)ο髮?shí)踐之路:提升抽象層次,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。