在研究了adr開發(fā)的MVC模式之后,我覺得M和C沒什么問題,挺好,但是這個(gè)V,我非常不滿意.
眾所周知,手機(jī)上不可能存放大量的數(shù)據(jù),一個(gè)APP大多對應(yīng)一個(gè)網(wǎng)絡(luò)數(shù)據(jù)庫,所以多數(shù)時(shí)候進(jìn)行的是從數(shù)據(jù)庫上獲取數(shù)據(jù)M,經(jīng)過處理后C,然后在界面上進(jìn)行展示V.
這跟PHP寫網(wǎng)頁有啥區(qū)別啊?
在手機(jī)上放控件,就像網(wǎng)頁元素中的標(biāo)簽+CSS,里面的數(shù)據(jù),就是從數(shù)據(jù)庫中取出來的.但是不管是PHP,還是ASP,都有一種非常好的方法來存儲這些數(shù)據(jù)庫中獲取的數(shù)據(jù),然后遍歷篩選后直接填入各式各樣的標(biāo)簽之中.
我們寫網(wǎng)頁,可以很方便的用HTML+CSS+JS弄前端,然后置入從后臺獲取的數(shù)據(jù),我覺得這個(gè)模式是非常好的.
但我們寫APP,發(fā)現(xiàn)完全不同了.
有人可能會說APP是程序,和網(wǎng)頁有天壤之別,不要混為一談.恩,這倒是,APP難度跟桌面應(yīng)用開發(fā)難度相比, 簡直是幼兒園難度對標(biāo)高等代數(shù)了.
我研究過手淘天貓,聯(lián)通移動的客戶端,我覺得跟網(wǎng)頁版沒任何差別,甚至是模仿網(wǎng)頁版的UI設(shè)計(jì).
這跟程序有個(gè)毛線的關(guān)系,就是披著APP的殼的網(wǎng)站.
所以不要跟我裝B,你提到MVC,你就跟網(wǎng)頁脫不了干系,畢竟MVC就是寫網(wǎng)站的時(shí)候出現(xiàn)的一種思想.
不過在android這個(gè)MVC中的V,有幾點(diǎn)是不吐不快的.
放著成熟的HTML和CSS標(biāo)準(zhǔn)不用不借鑒,用最原始的XML標(biāo)簽來建構(gòu).有人說HTML本質(zhì)也是XML標(biāo)簽,恩,這很對,但是你見過HTML里面的XML和樣式全部混在一起,沒任何可讀性嗎?既生成,且描述,即元素和樣式全擠在一起,這算什么鬼?所以這是一個(gè)讓我瞧不起的敗筆,你既然要講分離,你就要好好的分離.
另外,android提供了五花八門的所謂布局模式,絕對相對約束線性,似乎是想讓人膜拜谷哥工程師的技術(shù)實(shí)力,其實(shí)這都是狗屁.
所謂手機(jī)屏幕,對標(biāo)的就是網(wǎng)頁容器,你見過網(wǎng)頁里面有這些亂七八糟的布局花樣嗎,一個(gè)CSS就能讓你實(shí)現(xiàn)任何你想要的效果,谷哥弄這么多亂七八糟的布局,還美名其曰為了適應(yīng)各種手機(jī)的屏幕,真是讓我笑掉大牙,你見過不能適應(yīng)各種顯示器分辨率的網(wǎng)頁嗎,你用手機(jī)瀏覽器上過網(wǎng)站嗎,那自適應(yīng)效果比你不知道高到哪里去了,而且開發(fā)還簡單.
我就舉一個(gè)雙方都有的控件例子.比如button,都有width這個(gè)屬性,CSS里面設(shè)置50%,就能在所有尺寸手機(jī)中自適應(yīng).文本框,margin,padding,都能有百分比設(shè)置,但android就不行了,他是什么warp和match,非常惡心的感覺.
講真,要想自適應(yīng),最好的辦法就是百分比屬性,任何絕對的像素值都是不行的, CSS非常完美的實(shí)現(xiàn)了這一點(diǎn),但android中所謂的DP,我根本不敢用,因?yàn)椴痪邆淙魏蔚淖赃m應(yīng)特性.
最讓人惡心的是,最近安卓推廣約束性布局模式,就是說你們以前學(xué)的什么線性相對都會統(tǒng)統(tǒng)過時(shí),有些小白就喜歡的不得了,其實(shí)對于真正的見多識廣的開發(fā)者來說, 這種換湯不換藥的小更改,耍小聰明,實(shí)則是增加開發(fā)成本,增加學(xué)習(xí)難度,不治本.真正要想治本,你就放棄這種亂七八糟自己都不相信自己的所謂布局模式,向成熟先進(jìn)的HTML+CSS這種UI構(gòu)建思想學(xué)習(xí).
小結(jié)一下:谷哥沒有一個(gè)成熟的頁面展示思想,所以造成如今的亂七八糟的布局模式,另外在布局模式里面,元素類型和顯示樣式全擠在一起,一點(diǎn)都不分離,能讓人起雞皮疙瘩.開發(fā)起來效率極為低下.
第二個(gè)不滿之處,適配器
眾所周知, MVC開發(fā)之中,C是重點(diǎn),是大頭,是難點(diǎn),代碼量也最多.但android如今給我的感覺,就特么的就光想著怎么寫遠(yuǎn)程數(shù)據(jù)怎么適配到各種亂七八糟的布局,怎么傳給屏幕上的控件了.
我們舉個(gè)例子,傳統(tǒng)S/C開發(fā)中,我們要獲取本月的訂單列表,可以向S端請求,請求到后,設(shè)置到C端控件中,即可展示了.
但是android開發(fā)中,你獲取的原始數(shù)據(jù),你還不能急著去設(shè)置到終端,終端也不接受,你首先得把這些數(shù)據(jù)緩存起來,然后去寫一個(gè)適配器,連接數(shù)據(jù)緩存和布局,連接后,你還要控制第一個(gè)訂單子項(xiàng)的view,還要手動緩存這個(gè)view,當(dāng)然你手機(jī)性能強(qiáng)也可以不緩存.
而這適配器的開發(fā)是完全要用戶手動的,谷哥不提供任何幫助,全特么的交給開發(fā)者了.
話說我有數(shù)據(jù)來了,你的OS就不能想個(gè)好點(diǎn)的方式趕緊接收了吧?
那人家寫桌面應(yīng)用也有滾動框,上拉下拉,網(wǎng)頁開發(fā)也有大量數(shù)據(jù)需要上拉下拉,別人為毛不需要緩存呢?
因?yàn)楣雀绮徊傩?本該由它自己實(shí)現(xiàn)的功能,全特么交給用戶來實(shí)現(xiàn),導(dǎo)致所謂的APP開發(fā)就是日夜不停地寫適配器.
或許有人會說,全讓OS做了,那寫APP就太簡單了,完全沒什么快感了.
確實(shí),一般的APP,就是增強(qiáng)版的網(wǎng)頁端,肯定沒什么意思了.
但是我們不能以此為借口,繼續(xù)做這種無用功的開發(fā).
安卓,不僅開源的版本亂七八糟,極度碎片化,而且,它提供的開發(fā)包,也是亂七八糟,不成體系的,昨天天出一個(gè)說代表以后的先進(jìn)開發(fā)方向,今天天馬上又出一個(gè)否定昨天的,明天又會有,這,實(shí)在是谷哥工程師的無能!!!