姓名:王紫圣 學(xué)號(hào):16130140355
【嵌牛導(dǎo)讀】編程的思想衫冻,不能只知道一條路
【嵌牛鼻子】換一種方式去想
【嵌牛提問】編程的時(shí)候要懷有怎樣的思想?
【嵌牛正文】
轉(zhuǎn)載自:原創(chuàng) 2017-03-03 追隨微笑 博客園
"人是活的蛮拔,程序是死的"這句話我時(shí)常提起孕荠,可能很多人不是很理解我為什么會(huì)這樣說,下面我就簡(jiǎn)單來談?wù)勎覍?duì)這句話的理解阿迈。
1.不要因?yàn)榧夹g(shù)而技術(shù)元媚,技術(shù)選型的初衷是需求。
現(xiàn)在很多人在做項(xiàng)目的時(shí)候苗沧,開口就提項(xiàng)目用的NoSql刊棕、大數(shù)據(jù)處理、分布式系統(tǒng)等等技術(shù)待逞。技術(shù)真的這么重要嗎甥角?
技術(shù)在軟件開發(fā)過程中的地位是不言而喻的,但是一個(gè)項(xiàng)目選擇合適的技術(shù)去實(shí)現(xiàn)是很有必要飒焦,也是一個(gè)很好的學(xué)習(xí)機(jī)會(huì)蜈膨。
比如做一個(gè)簡(jiǎn)單的人事管理系統(tǒng),簡(jiǎn)單的說就是對(duì)數(shù)據(jù)的添加牺荠、刪除翁巍、修改。
但是隨著NoSql的普及和運(yùn)用休雌,很多人在設(shè)計(jì)的時(shí)候可能會(huì)想用緩存可以減輕數(shù)據(jù)庫壓力灶壶,增加數(shù)據(jù)的讀取速度等等優(yōu)點(diǎn)。
從設(shè)計(jì)圖可以看出基本的設(shè)計(jì)杈曲,設(shè)計(jì)之初就想到NoSql的好處驰凛,但是很多問題都沒有考慮到,比如:數(shù)據(jù)的同步策略担扑、簡(jiǎn)單數(shù)據(jù)用NoSql效率真的比直接用數(shù)據(jù)庫高恰响,高好多等等問題?
所以說技術(shù)和需求是相輔相成的涌献,單一的需求或者技術(shù)就是咩有意義的胚宦,那么在需求變更過程中選擇恰當(dāng)?shù)募夹g(shù)解決問題很重要、很重要?
2.做功能之前請(qǐng)不要先說效率枢劝,請(qǐng)先完成功能在進(jìn)行優(yōu)化效率井联。
編碼的運(yùn)行效率直接影響到系統(tǒng)的運(yùn)行速度是非常重要的,但是當(dāng)你遇到一個(gè)問題的時(shí)候您旁,一起討論問題的時(shí)候烙常。你是否最先想到的如果去解決問題,而不是看別人意見的缺點(diǎn)(這樣效率高不高鹤盒、影響性能高不高蚕脏、安全性等問題)?
我這里不是說考慮這些不好侦锯,而是當(dāng)你在想到一個(gè)比較的成熟的處理辦法之后蝗锥,你在去想這些問題÷蚀ィ可能會(huì)有人提出質(zhì)疑,這樣做是不是太片面了汇竭、不利擴(kuò)展性等等問題葱蝗?是這邊必須承認(rèn)有這樣的問題,但是一個(gè)功能都沒有做出來细燎,想這些問題有用两曼?
比如在遇到webapi請(qǐng)求后,根據(jù)actionID去判斷執(zhí)行對(duì)應(yīng)的fun時(shí)候
1.用if去完成
if(ActionID==1)
? functioin1();
else if(ActionID==2)
? functioin2();
else
? functioin3();
可能就會(huì)有人說這樣寫玻驻,萬一ActionID太多不利于擴(kuò)展性悼凑,不夠靈活。
2.好吧我換成swith
Swith(ActionID)
? case 1:
? ? Function1();
? ? break;
? case 2:
? ? Function2();
? ? break;
? default:
? ? break;
可能還是會(huì)有上述的問題璧瞬。
3.好吧我再換一種吧
Dictionary<int,Action> fun =new Dictionary<string,Action>():
fun.add(1,function1);
fun.add(2,function2);
fun.add(3,function3);
if (Fun.ContainsKey(protoid))
? ? ? ? Fun[protoid].Invoke();
可能會(huì)有說這樣用影響性能啥的户辫。
其實(shí)最后我只想說一句,這些方法你都用過嗤锉,嘗試過渔欢?曉得會(huì)影響擴(kuò)展、安全瘟忱、性能奥额?如果真有,你有更好的解決辦法访诱?如果有更好垫挨,如果沒有那么還是建議你先一步一步的先去解決當(dāng)前的問題,那么在考慮下一步的其他問題吧触菜?
3.太過死板九榔,不懂靈活。
當(dāng)遇到一個(gè)問題的時(shí)候,一味的去新的方法或者新的東西上面去想辦法帚屉,不能仔細(xì)的回看自己原來做過的東西是否可以修改/重用谜诫?
比如一個(gè)如下的簡(jiǎn)單div組裝的TREE樹形結(jié)構(gòu)圖
<div id=‘SF’>
? ? <div id='1001'>四川省<div>
<div>
<div id='SJ'>
? ? <div id='10010'>成都市<div>
<div>
<div id='SJ'>
? ? <div id='10011'>綿陽市<div>
<div>
<div id='SJ'>
? ? <div id='10012'>德陽市<div>
<div>
當(dāng)知道一個(gè)市級(jí)的ID去查詢省級(jí)的ID
很多人覺得按照規(guī)范應(yīng)該是根據(jù)市級(jí)DIV然后去查詢父級(jí)的DIV然后在查詢ID,這個(gè)方法可行的攻旦,但是如果樹N多層數(shù)喻旷,不是需要查詢父級(jí)的父級(jí)...
其實(shí)認(rèn)真觀察之后會(huì)發(fā)現(xiàn)每個(gè)市級(jí)的ID 和父級(jí)ID 是有關(guān)系的,可以直接操作ID變化牢屋,組裝父類ID且预,但是如果父類和子類沒有關(guān)系...
一個(gè)div標(biāo)簽其實(shí)不但可以ID,還可以用其他屬性表示其關(guān)系或者對(duì)應(yīng)的ID烙无,然后根據(jù)其他屬性查詢锋谐,但是可能在規(guī)范性會(huì)有點(diǎn)小問題...
在初始化的時(shí)候 ID 可以是 SJ+ID這樣組合,然后切割I(lǐng)D就可以查詢組裝...
如果上述都不行截酷,可以不用DIV組裝用JqTree等等
這個(gè)例子其實(shí)就是想表達(dá)一個(gè)其實(shí)解決一個(gè)問題的辦法多種多樣涮拗,一種不行換一種,條條大路通羅馬迂苛。
上述都是個(gè)人的認(rèn)識(shí)和理解三热,僅僅代表個(gè)人觀點(diǎn),有更好觀點(diǎn)歡迎斧正三幻,謝謝就漾!
[