我的服装DRP之开发感悟
先向各位拜個(gè)晚年。
今年過(guò)年期間都在想DRP的事,很多朋友也聯(lián)系我,討論技術(shù)問(wèn)題的、謀求合作的、分析行業(yè)前景的、讓我提供源碼和數(shù)據(jù)庫(kù)的都有。再次謝謝朋友們的關(guān)心。目前來(lái)說(shuō),在修改系統(tǒng)bug的同時(shí),我打算重新找一份工作,畢竟在能力轉(zhuǎn)換成財(cái)富之前,生活還是要繼續(xù)。
Winform or WPF:
今天在QQ上和一位山東的朋友聊了會(huì),其中聊到BS和CS的老生常談,說(shuō)道有些功能BS不好實(shí)現(xiàn)。我認(rèn)為兩個(gè)事物孰優(yōu)孰劣需要放在特定場(chǎng)景中才能比較,關(guān)于這兩者的區(qū)別谷歌一下即可,我就不分析了,徒惹板磚。其實(shí)同樣是CS,具體的UI框架也包括很多,在.NET中主要就是winform和wpf,前幾天就看到一篇文章關(guān)于開(kāi)發(fā)WPF的一些感想,作者提出:為什么到現(xiàn)在都沒(méi)有客戶端的WPF系統(tǒng)?在如今WEB化和移動(dòng)化大行其道的情況下,windows桌面程序開(kāi)發(fā)的價(jià)值又有幾何?說(shuō)實(shí)話,我也心存同這位博主一樣的疑慮。對(duì)于這兩個(gè)問(wèn)題,每個(gè)人都有自己的看法。我認(rèn)為相似的幾個(gè)技術(shù)有個(gè)先來(lái)后到的“優(yōu)先級(jí)”,試想,假如wpf和winform的出現(xiàn)時(shí)間換一下,再擴(kuò)展一下思路,假如當(dāng)初C#和Java這兩種語(yǔ)言同時(shí)出現(xiàn)在大伙面前,假如HTML遵循XAML的語(yǔ)法……世界會(huì)是什么樣子?所謂的市場(chǎng)占有率通常并不能比較出技術(shù)間的優(yōu)劣(沒(méi)有貶低誰(shuí)的意思),只能說(shuō)聲:抱歉,哥比你先到。
單純對(duì)于行業(yè)軟件而言,在winform和wpf中選擇,我偏向于wpf。如果非得選擇winform也可以,不過(guò)最好給我提供一個(gè)winform實(shí)現(xiàn)框架,這個(gè)框架需要包含以下三點(diǎn)功能:
架構(gòu)設(shè)計(jì):
工作多年,接觸過(guò)許多編碼界的朋友,其中一些高手對(duì)OO的理解可謂已入化境,沒(méi)事就抽個(gè)接口玩玩,調(diào)試他們程序的時(shí)候永遠(yuǎn)只能看到黃色小箭頭在浩瀚的代碼海面上跳躍,要想一探究竟,對(duì)我這種菜鳥(niǎo)來(lái)說(shuō)只有淹死的份。記得我剛參加工作那會(huì),參與開(kāi)發(fā)一個(gè)簡(jiǎn)單的會(huì)議管理軟件,項(xiàng)目經(jīng)理給我展示項(xiàng)目架構(gòu),說(shuō)這是當(dāng)時(shí)最流行的架構(gòu)設(shè)計(jì)。我猛地一瞅,頓時(shí)有種膜拜的趕腳——那龐大的項(xiàng)目,那眾多的類庫(kù),那抽象,那反射,那配置,一看就很高級(jí)喲,我估計(jì)沒(méi)十年八年是理解不了的,差點(diǎn)還動(dòng)了轉(zhuǎn)行的念頭。項(xiàng)目經(jīng)理意味深長(zhǎng)地拍著我的肩膀,說(shuō)慢慢來(lái),會(huì)明白的。可是我最終也沒(méi)能明白。
我不明白的是為什么數(shù)據(jù)層要有個(gè)接口,他們跟我說(shuō)為了支持多數(shù)據(jù)庫(kù),雖然現(xiàn)在只用到SqlServer,保不齊百年之后要切換到Oracle;我不明白的是為什么業(yè)務(wù)邏輯層也要接口,他們跟我說(shuō)可能客戶會(huì)經(jīng)常改變需求,雖然需求改變常常導(dǎo)致改變接口本身,不過(guò)這是OO的原則,你納悶說(shuō)明你理解的還不夠深;我不明白的是為什么要用工廠方法、抽象工廠方法,他們說(shuō)這叫統(tǒng)一標(biāo)準(zhǔn),雖然大部分接口都沒(méi)有第二個(gè)實(shí)現(xiàn)類;我不明白的是為什么這看似高級(jí)的架構(gòu)沒(méi)有給開(kāi)發(fā)者和用戶帶來(lái)良好的體驗(yàn),他們說(shuō)加班還不夠;……
一年以后,我離開(kāi)我的第一家公司。跟同事們告別的時(shí)候,我們都看到了各自心中的郁悶,這是長(zhǎng)期作戰(zhàn)的結(jié)果,而敵人是由我們自己制造出來(lái)的。
我還碰到過(guò)另一個(gè)極端,不是說(shuō)三層么,做啥項(xiàng)目都只建三個(gè)類庫(kù),對(duì)應(yīng)數(shù)據(jù)層、邏輯層、UI層,最多加個(gè)實(shí)體類庫(kù)。你想要個(gè)通用類庫(kù),門(mén)都沒(méi)有。
后來(lái),我把QQ簽名改成“設(shè)計(jì),是一種美,就像蓋大樓,如果每座房屋都是千篇一律,那么也就不存在架構(gòu)師了。”,這是從某博文上復(fù)制下來(lái)的。雖然這句話并非那篇文章的重點(diǎn),不過(guò)當(dāng)時(shí)看到這句話的時(shí)候,我感覺(jué)到了共鳴,壓抑已久的心靈終于得到解放,忍不住出門(mén)打了三斤白酒站在陽(yáng)臺(tái)就喝了起來(lái)。
開(kāi)發(fā)效率:
原本我打算連著生產(chǎn)系統(tǒng)一塊開(kāi)發(fā),后來(lái)想說(shuō)先把分銷(xiāo)穩(wěn)定了再說(shuō)。開(kāi)發(fā)這套系統(tǒng),至今經(jīng)歷了5個(gè)半月。想起當(dāng)初我的4人團(tuán)隊(duì)一個(gè)半拉子系統(tǒng)都要搞幾年,我驚異于自己的效率。本系統(tǒng)完全從0開(kāi)始,所采用的框架也非我原本熟悉的,只不過(guò)在業(yè)務(wù)需求上借鑒了行業(yè)經(jīng)驗(yàn),但也增加了很多實(shí)用功能。若一個(gè)普通團(tuán)隊(duì)開(kāi)發(fā),我估計(jì)要在相同時(shí)間內(nèi)完成幾乎不可能(何謂普通?并不大的軟件公司的項(xiàng)目團(tuán)隊(duì))。也許你不會(huì)贊同我的觀點(diǎn),那是你沒(méi)有經(jīng)歷過(guò)文檔流于形式的“趕鴨子上架開(kāi)發(fā)模式”。
這套系統(tǒng)首先大規(guī)模的系統(tǒng)重構(gòu)就有4次,這對(duì)我來(lái)說(shuō),也就咬咬牙的事,但對(duì)一個(gè)團(tuán)隊(duì)意味著繁瑣的溝通、重疊工作的分配、不滿情緒的滋生、冒出的各種bug、疲勞的重復(fù)測(cè)試、責(zé)任問(wèn)題、文檔更新等等,以及上述負(fù)面效應(yīng)的多次“迭代”。
對(duì)于分配給A的任務(wù),你不能保證A完全按照你的想法來(lái),即使功能實(shí)現(xiàn)了,你也得檢查看看有么有影響運(yùn)行效率的語(yǔ)句,特別是對(duì)能力不足的成員,尤其提心吊膽。在實(shí)現(xiàn)難點(diǎn)或功能點(diǎn)較多的模塊,通常難以在一開(kāi)始就明確知道采用何種方式,往往花四天時(shí)間構(gòu)思,兩天時(shí)間編碼,在編碼過(guò)程中會(huì)重構(gòu)個(gè)好幾次,這需要編碼者有足夠勝任該項(xiàng)任務(wù)的能力(而一個(gè)普通團(tuán)隊(duì)中很難有幾個(gè)相當(dāng)優(yōu)秀的程序員,而技術(shù)主管又不能事事親力親為),有時(shí)候還得其它模塊配合,這又牽扯出上述情況了。當(dāng)某處需求實(shí)現(xiàn)了,盡管代碼看上去并不十分完美,為了“顧全大局”,也就這樣吧,甚至優(yōu)良代碼要向劣質(zhì)代碼讓步。
若有原成員離開(kāi)或新成員加入,稀奇古怪的編碼風(fēng)格會(huì)讓相關(guān)成員抓狂,編碼風(fēng)格可以強(qiáng)制規(guī)范,但代碼邏輯時(shí)不常地出現(xiàn)理解偏差。當(dāng)系統(tǒng)終于成型,呈現(xiàn)出來(lái)的很可能是個(gè)臃腫的胖子,因?yàn)槊總€(gè)開(kāi)發(fā)人員按自己的需求寫(xiě)的幫助類代碼,很多都是重復(fù)的,更不用說(shuō)隱藏在各處的私有可抽離代碼。這無(wú)疑增加了后期維護(hù)的成本。
團(tuán)隊(duì)開(kāi)發(fā)過(guò)程中,有規(guī)范的文檔會(huì)好很多,此時(shí)文檔就相當(dāng)于整個(gè)團(tuán)隊(duì)的大腦負(fù)責(zé)信息存儲(chǔ)的存儲(chǔ)區(qū),而成員間的溝通賦予了新的含義,那就是團(tuán)隊(duì)思想的源泉。不過(guò)我并不認(rèn)為開(kāi)發(fā)文檔(如詳設(shè))在一開(kāi)始就必須存在,而是在項(xiàng)目架構(gòu)等基本上穩(wěn)定了,再著手編寫(xiě)。說(shuō)回來(lái),現(xiàn)在有多少公司的文檔作為其原本的意義而存在呢??
創(chuàng)業(yè)(?):?
老實(shí)說(shuō)我這還談不上創(chuàng)業(yè)二字,更多的是區(qū)別于正常上班的另一種工作方式。若以后能靠這賺點(diǎn)錢(qián)更好,否則就當(dāng)提升下自己的開(kāi)發(fā)能力。我并非做事目的性明確的人,所做的事只是我認(rèn)為做了并無(wú)害處。大多數(shù)人都有個(gè)創(chuàng)業(yè)夢(mèng),特別是在IT界,真正去做的寥寥無(wú)幾;創(chuàng)業(yè)并且小有成就的,寥寥無(wú)幾;創(chuàng)業(yè)并且大展宏圖的,寥寥無(wú)幾。這些都不是我的目的,我的目的很簡(jiǎn)單,多賺點(diǎn)錢(qián),然后做我真正喜歡做的事。?
我一直以為我不是能堅(jiān)持長(zhǎng)久的人,特別是獨(dú)自一人完成一個(gè)產(chǎn)品,特別是在一個(gè)結(jié)婚生子都顯略晚的年紀(jì)。車(chē)子賣(mài)了,存款花了,即使通情達(dá)理的父母不會(huì)埋怨,即使有熱心的兄弟幫著給我打氣,卻在無(wú)形中加重了我心中的負(fù)擔(dān)。畢竟代碼的世界里我能依靠的只有自己,每天對(duì)著顯示器敲著一個(gè)個(gè)代碼,偶爾想到迷霧重重的前景,我就想說(shuō):算了吧,安耽地找份工作也有不錯(cuò)的收入,何必逞強(qiáng)呢,一個(gè)人難道能比一個(gè)團(tuán)隊(duì)開(kāi)發(fā)出更好的作品嗎。孩提時(shí)代偉大的理想,此刻變成對(duì)社會(huì)幾乎無(wú)用的“賺錢(qián)”二字,百年之后,誰(shuí)又記得我呢?有時(shí)思想如同不小心打開(kāi)的潘多拉魔盒,負(fù)面的情緒傾瀉而出,讓人極為沮喪。?
令我欣慰的是,我完成了計(jì)劃的第一步。沒(méi)有半途而廢并最終完成一個(gè)可用的產(chǎn)品,感覺(jué)挺好。
最后貼個(gè)系統(tǒng)截圖以供觀賞,截圖中的數(shù)據(jù)為測(cè)試數(shù)據(jù),圖片摘自互聯(lián)網(wǎng),所示功能使用MVVM模式開(kāi)發(fā),若采用Winform,沒(méi)有引入特殊擴(kuò)展框架的話,估計(jì)至少三倍工作量還不一定能完成吧。
轉(zhuǎn)載請(qǐng)注明本文出處:http://www.cnblogs.com/newton/archive/2013/01/20/2868272.html
轉(zhuǎn)載于:https://www.cnblogs.com/newton/archive/2013/02/22/2868272.html
總結(jié)
以上是生活随笔為你收集整理的我的服装DRP之开发感悟的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DtCms.ActionLabel.Ar
- 下一篇: android surfaceview