VueKotlin Android框架的Spring

看到標(biāo)題大家很疑惑础爬,spring框架是java服務(wù)端的框架,為什么會(huì)在移動(dòng)端?

首先強(qiáng)調(diào)一點(diǎn)spring確實(shí)是java服務(wù)端的的輕量框架,spring非常優(yōu)秀蛀醉。他的設(shè)計(jì)理念在我看過之后被深深折服,完善成熟的 DI/IOC 和 AOP讓我著迷钾怔。了解之后發(fā)現(xiàn)VueKotlin和他有著異曲同工之妙,該有人說我攀高枝了显歧,但是我深入分析之后發(fā)現(xiàn)這兩個(gè)框架竟然在設(shè)計(jì)上是一樣的,我之前沒有接觸過服務(wù)端的東西确镊。

先放上demo代碼:https://github.com/wangyongyue/VueKotlinDemo.git

還是先放上spring的說明士骤,VueKotlin的說明要不要改改啊

Spring框架是Java應(yīng)用最廣的框架,他的成功來源于理念蕾域,而不是技術(shù)本生拷肌,他的理念報(bào)告IOC(控制反轉(zhuǎn)),AOP(面向切片編程)旨巷。

Spring 是一個(gè)輕量級(jí)的DI/IOC 和 AOP容器的開源框架巨缘,侵入最少。

VueKotlin 大言不慚的說是移動(dòng)框架的Spring,到底哪里來的勇氣和自信采呐,讓我們來對(duì)比看看:

1若锁,IOC 控制反轉(zhuǎn),顧明思議斧吐,以前這么寫的代碼拴清,我們反過來寫,就是控制反轉(zhuǎn)了会通。

以MVC的一小段代碼來說明一下:

正轉(zhuǎn)的代碼:

var intent = Intent()
intent.setClass(this,HomeActivity::class.java)
startActivity(intent)

反轉(zhuǎn)的代碼:

var intent = Intent()
intent.putExtra("className",Home.toString())
intent.setClass(this,Home.getActivity())
startActivity(intent)

正傳的代碼就是通過Activity來標(biāo)定業(yè)務(wù)流程口予,Activity是唯一的主角,無論什么模式涕侈,最后都有回到Activity里面去實(shí)例化沪停,完成數(shù)據(jù)加載和view渲染。

反轉(zhuǎn)概念就是完全的以數(shù)據(jù)(data/http)為業(yè)主流程裳涛,Activity跌下寶座木张,變成了一個(gè)容器(容器這個(gè)概念要記住),有數(shù)據(jù)來決定需要什么樣的容器端三,代碼如下

在Model里面:

class Home:HomeInterface{

companion object{
fun getActivity(): Class<Any>{
return HomeActivity::class.java as Class<Any>
}
}

fun loadData(){ //實(shí)現(xiàn)了HomeInterface的方法

//加載數(shù)據(jù)

}

}

在HomeVC里面的代碼:

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val m = Class.forName(this.className).getConstructor().newInstance() as HomeInterface

m.loadData()

}

}

//協(xié)議

interface HomeInterface{

fun loadData()

}

這里大家可以看到了VueKotlin的優(yōu)勢(shì)舷礼,Activity可以完成復(fù)用和解耦了。Activity中動(dòng)態(tài)加載Model類完成業(yè)務(wù)需求郊闯。有人說了不對(duì)妻献,在Spring中實(shí)現(xiàn)反轉(zhuǎn)是通過反射完成動(dòng)態(tài)實(shí)例化的。對(duì)的团赁,Kotlin中可以用反射完成動(dòng)態(tài)加載育拨,但是有簡(jiǎn)便的方法當(dāng)然就用簡(jiǎn)便的啦,反射是有代價(jià)的

很多人注意到了HomeInterface欢摄,這是怎么回事熬丧?

這個(gè)就引出下一個(gè)核心了AOP,面向切片編程,很多人都有寫怀挠,我在這貼一下百度百科的定義

2析蝴,AOP為Aspect Oriented Programming的縮寫害捕,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)闷畸。

不要管定義尝盼,看一眼就好,看一天不明白還是不明白啊腾啥。

AOP有兩種實(shí)現(xiàn)方案一種接口實(shí)現(xiàn),就是上邊這種的冯吓;一種是子類實(shí)現(xiàn);

總結(jié)就是多態(tài)倘待,開始我也是子類實(shí)現(xiàn),但是當(dāng)需要增加一個(gè)接口時(shí)组贺,需要在用到的地方都去改凸舵,容易漏,但是接口實(shí)現(xiàn)要加需求失尖,沒改的地方會(huì)有警告啊奄,這個(gè)超級(jí)好。所以放棄子類實(shí)現(xiàn)掀潮,改成接口實(shí)現(xiàn)菇夸。

interface目的就是規(guī)定容器(Acitvity/fragment)對(duì)外部的接口協(xié)議,想要使用容器(Acitvity/fragment)就是實(shí)現(xiàn)他的協(xié)議接口就可以了仪吧。

但是數(shù)據(jù)是怎樣流動(dòng)的呢庄新?Acitvity里面有一個(gè)TextView,Model請(qǐng)求數(shù)據(jù)之后如何回傳呢薯鼠?

對(duì)择诈,通知observer,異步請(qǐng)求完數(shù)據(jù)通知回傳,VueKotlin是如何完成的呢出皇?

先看例子:

在Model里面:

class Home:HomeInterface{

var textVue:Vue = Vue()

companion object{
fun getActivity(): Class<Any>{
return HomeActivity::class.java as Class<Any>
}
}
fun loadData(){ //實(shí)現(xiàn)了HomeProtocol的方法

//加載數(shù)據(jù)

textVue.v_text {

return "wangyongyue"

}

}

}

在HomeActivity里面的代碼:

class HomeActivity: AppCompatActivity(){

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
val m = Class.forName(this.className).getConstructor().newInstance() as HomeInterface

m.loadData()

}

}

//協(xié)議

Protocol HomeProtocol{

var textVue:Vue

fun loadData()

}

當(dāng)大家在看到var textVue:Vue = Vue()這行代碼很懵羞芍,不要慌我來解釋一下。

Vue (著名的前端框架VUE),沒錯(cuò)你沒看錯(cuò)郊艘,就是他荷科,你這個(gè)大帥哥。

Vue類在VueKotlin的核心類纱注,為什么取這個(gè)名字呢步做。之前也不叫這個(gè),叫CatFlow奈附。但是我使用的API命名是借鑒的Vue來寫的全度,寫了一大半的時(shí)候感覺用人家的東西應(yīng)該告訴一聲的,最后想想就用了VueKotlin的名字了斥滤。有認(rèn)識(shí)尤大神的可以推薦一下下啊

Vue類就實(shí)現(xiàn)數(shù)據(jù)回傳的将鸵,相當(dāng)是view找了一個(gè)代理人勉盅,你幫我看這個(gè)去,干完了告訴我顶掉。最好是一個(gè)Vue只做一件事情草娜,也可以做多件但是不建議。

至此痒筒,VueKotlin 和Spring的理念契合完畢宰闰,完美如你。

想到一句老話簿透,編程移袍,重要的是思想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末老充,一起剝皮案震驚了整個(gè)濱河市葡盗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啡浊,老刑警劉巖觅够,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巷嚣,居然都是意外死亡喘先,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門廷粒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苹祟,“玉大人,你說我怎么就攤上這事评雌∈鞣悖” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵景东,是天一觀的道長(zhǎng)砂轻。 經(jīng)常有香客問我,道長(zhǎng)斤吐,這世上最難降的妖魔是什么搔涝? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮和措,結(jié)果婚禮上庄呈,老公的妹妹穿的比我還像新娘。我一直安慰自己派阱,他們只是感情好诬留,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般文兑。 火紅的嫁衣襯著肌膚如雪盒刚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天绿贞,我揣著相機(jī)與錄音因块,去河邊找鬼。 笑死籍铁,一個(gè)胖子當(dāng)著我的面吹牛涡上,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拒名,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼吩愧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了靡狞?” 一聲冷哼從身側(cè)響起耻警,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤隔嫡,失蹤者是張志新(化名)和其女友劉穎甸怕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腮恩,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梢杭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秸滴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片武契。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荡含,靈堂內(nèi)的尸體忽然破棺而出咒唆,到底是詐尸還是另有隱情,我是刑警寧澤释液,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布全释,位于F島的核電站,受9級(jí)特大地震影響误债,放射性物質(zhì)發(fā)生泄漏浸船。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一寝蹈、第九天 我趴在偏房一處隱蔽的房頂上張望李命。 院中可真熱鬧,春花似錦箫老、人聲如沸封字。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽周叮。三九已至辩撑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仿耽,已是汗流浹背合冀。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留项贺,地道東北人君躺。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像开缎,于是被迫代替她去往敵國(guó)和親棕叫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345