最熟悉的陌生人 MVC

2022-03-25 02:27:42 字數 1506 閱讀 8215

以前開發ios程式的時候用的最多的是mvc的設計模式,這種軟體架構的模式是由:模型(model)【螢幕中展示的】、檢視(view)【如何展示的】和控制器(controller)【程式的資料,本質】三部分組成。具體的使用很簡單,本質上來說就是:模型【model】響應使用者請求並返回響應資料,檢視【view】負責格式化資料並把它們呈現給使用者,業務邏輯和表示層分離,同乙個模型可以被不同的檢視重用,所以大大提高了**的可重用性。這樣使用起來十分的方便上手也比較快,只是最近有人突然問我mvc之間是怎麼通訊的?不就是使用者操作檢視【view】通過控制器物件【controller】傳給資料模型物件,最終會建立或更改模型物件,當模型物件【model】更改時,它會通知控制器【controller】,控制器更新相應的檢視物件【view】。這樣就是它們之間通訊的過程,總的來說就是v->c->m -> c -> v,但是具體呢?具體是通過什麼更改的,又是通過什麼接收的呢???下面這張圖相信做過mvc開發的都見過

這張圖看著也挺麻煩的各種標記,我做了乙個簡化版的,上圖請看:

通過這個圖看起來是不是很清晰明了,我還是簡單的解釋一下吧mvc的這種模式下model和view之間是不能直接進行通訊的,只能通過controller傳遞,而controller可以直接呼叫model,而model是通過notification和kvo和controller間接通訊的【上面已經做了標註】,controller又是通過outlet【注:outlet是控制項的引用】直接連線到相應的view中,對view進行控制。view通過action-target、delegate、或者是datasource與controller進行通訊的。就這樣mvc之間的通訊機制就簡單明瞭了;

最後再簡單的提一下mvvm這種設計模式它是將controller的位置替換為了viewmodel,也就是說在viewcontroller中view和controlle之間都是繫結的,這樣的話也就能直接將他們進行連線就可以了,這時候我們建立的viewmodel中就直接可以放進去那些所有「表示邏輯」的東西。這樣就會簡化controller用乙個可以簡單的表示一下:

其實本質上還是mvc只是一些「表示邏輯」的**的位置改變了,使**更為簡潔,這樣在進行對controller測試的時候由於**的量減少,測試也是很方便的,其實mvvm目前就個人而言使用不多,不足之處還望指教。

【一些處理資料邏輯和檢視邏輯的,初始化viewmodel】

熟悉的陌生人 跨域

跨域是指乙個域下的文件或指令碼試圖去請求另乙個域下的資源,這裡跨域是廣義的。其實我們通常所說的跨域是狹義的,是由瀏覽器同源策略限制的一類請求場景。吶,說起跨域就不得不提一下同源策略,那什麼是同源策略呢?同源策略 瀏覽器提供的一種安全的執行環境 同源策略限制了從同乙個源載入的文件或指令碼如何與來自另乙...

熟悉的陌生人 軟體工程

熟悉的陌生人 軟體工程 去年暑假到現在是乙個蛻變的過程!從軟體工程到uml到設計模式再到三層架構 其實這些都屬於軟工的範疇 這是一條充滿艱辛,充滿曲折的道路,一路走來,感觸頗多。進入提高班,再次接觸軟體工程,讓我覺得既熟悉又陌生。造成這種讓人糾結的狀態只能怪自己當時太無知。沒有好好聽大學老師講課。不...

熟悉的陌生人 軟體工程

熟悉的陌生人 軟體工程 去年暑假到現在是乙個蛻變的過程!從軟體工程到uml到設計模式再到三層架構 其實這些都屬於軟工的範疇 這是一條充滿艱辛,充滿曲折的道路,一路走來,感觸頗多。進入提高班,再次接觸軟體工程,讓我覺得既熟悉又陌生。造成這種讓人糾結的狀態只能怪自己當時太無知。沒有好好聽大學老師講課。不...