Якую ролю гуляюць MVVM ў ASP.NET MVC 4 вэб-прыкладанняў?

У той час як я чытаю кнігу «ASP.NET MVC 4» Я задаюся пытаннем аб MVVM. Я пачаў звяртаючыся да дапамогі і не можа знайсці якія-небудзь кнігі аб распрацоўцы вэб-прыкладанняў з дапамогай MVVM, так што я павінен прапускаць трохі інфармацыі тут.

З таго, што я разумею, MVVM выкарыстоўваецца ў вэб-прыкладанняў на баку кліента праз knockout.js і іншых структур. Калі ж я павінен быў распрацаваць прыкладанне для Windows Phone, я мог бы выкарыстаць MVVM наўпрост, без выкарыстання MVC. Ці азначае гэта, канцэпцыя MVVM/прывязкі дадзеных проста не адносіцца да вэб-прыкладанняў кліент-сервер?

11
Вы маглі б таксама хацелі, каб паглядзець на кутніх рамках па Google, яго лепш тады накаўт
дададзена аўтар rajansoft1, крыніца
Вы маглі б таксама хацелі, каб паглядзець на кутніх рамках па Google, яго лепш тады накаўт
дададзена аўтар rajansoft1, крыніца

7 адказы

MVVM сапраўды накшталт подмаски. Там не зусім ніякіх «MVVM» рамкі вэб-дадатак там. Яны ўсе MVC, і вы ў значнай ступені проста ўключыць мадэль прадстаўлення, калі вы хочаце адзін.

З ASP.NET MVC, у прыватнасці, вы проста стварыць клас, як правіла, з імем у выглядзе [Model Name] ViewModel або [назва мадэлі] VM . Гэты клас будзе мець толькі ўласцівасці з мадэлі, што вам трэба працаваць і нічога лішняга, што не мае сэнсу ставіць на вашай фактычнай мадэлі базы дадзеных спінкамі, як SelectList s, і г.д.

У вашых дзеяннях, вы проста перадаць асобнік гэтай мадэлі прадстаўлення на ваш погляд, замест мадэлі:

return View(viewModelInstance);

І, вядома ж, пераканайцеся, што ваша кропка гледжання прызнае, што:

@model Namespace.To.MyViewModel

Толькі трохі складаная частка электромонтаж мадэлі прадстаўлення мадэлі (г.зн. атрыманне дадзеных у/з выгляду мадэлі/мадэлі. Вы можаце зрабіць гэта ўручную, відавочна адлюстраванне уласцівасцяў, ці вы можаце выкарыстоўваць нешта накшталт AutoMapper .

15
дададзена
На жаль, я павінен быў быць больш канкрэтным. Я меў на ўвазе рамкі вэб-прыкладанняў. Я не ведаю ні чыста MVVM вэб-стэкаў.
дададзена аўтар Chris Pratt, крыніца
Кутні ад Google, Накаўт з'яўляюцца рамкамі MVVM, якія пабудаваныя на JQuery
дададзена аўтар rajansoft1, крыніца

MVVM сапраўды накшталт подмаски. Там не зусім ніякіх «MVVM» рамкі вэб-дадатак там. Яны ўсе MVC, і вы ў значнай ступені проста ўключыць мадэль прадстаўлення, калі вы хочаце адзін.

З ASP.NET MVC, у прыватнасці, вы проста стварыць клас, як правіла, з імем у выглядзе [Model Name] ViewModel або [назва мадэлі] VM . Гэты клас будзе мець толькі ўласцівасці з мадэлі, што вам трэба працаваць і нічога лішняга, што не мае сэнсу ставіць на вашай фактычнай мадэлі базы дадзеных спінкамі, як SelectList s, і г.д.

У вашых дзеяннях, вы проста перадаць асобнік гэтай мадэлі прадстаўлення на ваш погляд, замест мадэлі:

return View(viewModelInstance);

І, вядома ж, пераканайцеся, што ваша кропка гледжання прызнае, што:

@model Namespace.To.MyViewModel

Толькі трохі складаная частка электромонтаж мадэлі прадстаўлення мадэлі (г.зн. атрыманне дадзеных у/з выгляду мадэлі/мадэлі. Вы можаце зрабіць гэта ўручную, відавочна адлюстраванне уласцівасцяў, ці вы можаце выкарыстоўваць нешта накшталт AutoMapper .

15
дададзена
На жаль, я павінен быў быць больш канкрэтным. Я меў на ўвазе рамкі вэб-прыкладанняў. Я не ведаю ні чыста MVVM вэб-стэкаў.
дададзена аўтар Chris Pratt, крыніца
Кутні ад Google, Накаўт з'яўляюцца рамкамі MVVM, якія пабудаваныя на JQuery
дададзена аўтар rajansoft1, крыніца

MVC гэта сістэма прывязкі дадзеных у адзін канец.

Напоўніце <�моцны> M Апрануў ў C ontroller, а затым перадаць яго <�моцны> V Мэн.


MVVM з'яўляецца двухбаковым звязванне дадзеных адзін.

Напоўніце <�моцны> M Апрануў, выкарыстоўваць яго ў V Мэн, калі V змены Мэн дзяржавы, ваш <�моцны> M абнаўленне Апрануў аўтаматычна. (І наадварот)

4
дададзена

MVVM стандартны шаблон праектавання для распрацоўкі WPF/Silverlight, і не варта блытаць з MVC для распрацоўкі ASP.Net.

Два можа гучаць аналагічна і некаторыя агульныя часткі, але гэта дзве розныя шаблоны праектавання.

З таго, што я даведаўся пра knockout.js, ён быў распрацаваны, каб стварыць «прывязкі дадзеных», аналягічныя тым, што вы будзеце выкарыстоўваць у распрацоўцы/Silverlight WPF, таму дызайн MVVM шаблон прымяняецца там.

Цытую з іншага адказаць мой пра розніцу паміж MVVM і MVC

<�Р> У <�моцны> MVVM , вашыя класы код ( ViewModels ) з'яўляюцца дадатак, у той час як ваш прадстаўлення проста даволі зручны інтэрфейс, які сядзіць у верхняй частцы кода прыкладання і дазваляе карыстальнікам ўзаемадзейнічаць з ім. Гэта азначае, што ViewModels мае велізарную працу, так як яны ваша прыкладанне, і нясуць адказнасць за ўсё, ад патоку дадатку да бізнес-логіцы.      <�Р> С <�моцны> MVC , <�ваш код> Праглядаў гэта дадатак, у той час як ваш кантролер апрацоўвае паток прыкладання. Логіка прыкладання, як правіла, змяшчаецца ў ViewModels , якія лічацца часткай М у MVC (Sidenote: М у MVC не можа разглядацца гэтак жа, як М у MVVM, таму што М пласт MVC змяшчае больш функцыянальных магчымасцяў, чым MVVM-х М пласт). Карыстальнік атрымлівае экран ( Прагляд ), яны ўзаемадзейнічаюць з ім, то ўявіць што-то да кантролер і кантролер вырашае, хто што робіць з дадзеныя і вяртае новы від для карыстальніка.
3
дададзена
@zeppelin Магчыма, усё змянілася, але некалькі гадоў таму, калі я праходзіў праз MVC падручнікі і гледзячы на ​​шаблоны MVC ў VS, я, здаецца, узгадваю класы, званыя «ViewModel» у тэчцы Models. Яны не былі на самай справе ViewModels у тым жа сэнсе, як MVVM ViewModels хоць. Абодва аб'екта былі атрыманы дадзеныя для View, але MVVM ViewModels часта робяць шмат працы, якая знаходзіцца ў кантролеры MVC.
дададзена аўтар Rachel, крыніца
Я лічу, што цытата з «іншага адказу» надта спрошчаны і, магчыма, недакладнага. «Дадатак» у гэтай цытаце мае на ўвазе, бізнес-логіку, і калі так, вы не ставіце бізнес-логіку ў VM ў MVVM, ні М у MVC. Аўтар цалкам прапусціў ўсю кропку V ст MVVM, дзе вы звычайна абмяжоўваюць аб'ём кода, за так што яны наўрад ці «вельмі дружалюбны інтэрфейс». VM не мае велізарную працу. Як ужо згадвалася абмежаваць колькасць бізнэс-логікі размешчаны там
дададзена аўтар MickyD, крыніца
«Логіка прыкладання, як правіла, знаходзіцца ў ViewModels, якія лічацца часткай M ў MVC» Як гэта так? M ў MVC ўтрымлівае толькі мадэлі (звычайна класы POCO), я думаю, што логіка прыкладання знаходзіцца ў кантролеры? Папраўце мяне, калі я памыляюся.
дададзена аўтар zeppelin, крыніца

MVVM стандартны шаблон праектавання для распрацоўкі WPF/Silverlight, і не варта блытаць з MVC для распрацоўкі ASP.Net.

Два можа гучаць аналагічна і некаторыя агульныя часткі, але гэта дзве розныя шаблоны праектавання.

З таго, што я даведаўся пра knockout.js, ён быў распрацаваны, каб стварыць «прывязкі дадзеных», аналягічныя тым, што вы будзеце выкарыстоўваць у распрацоўцы/Silverlight WPF, таму дызайн MVVM шаблон прымяняецца там.

Цытую з іншага адказаць мой пра розніцу паміж MVVM і MVC

<�Р> У <�моцны> MVVM , вашыя класы код ( ViewModels ) з'яўляюцца дадатак, у той час як ваш прадстаўлення проста даволі зручны інтэрфейс, які сядзіць у верхняй частцы кода прыкладання і дазваляе карыстальнікам ўзаемадзейнічаць з ім. Гэта азначае, што ViewModels мае велізарную працу, так як яны ваша прыкладанне, і нясуць адказнасць за ўсё, ад патоку дадатку да бізнес-логіцы.      <�Р> С <�моцны> MVC , <�ваш код> Праглядаў гэта дадатак, у той час як ваш кантролер апрацоўвае паток прыкладання. Логіка прыкладання, як правіла, змяшчаецца ў ViewModels , якія лічацца часткай М у MVC (Sidenote: М у MVC не можа разглядацца гэтак жа, як М у MVVM, таму што М пласт MVC змяшчае больш функцыянальных магчымасцяў, чым MVVM-х М пласт). Карыстальнік атрымлівае экран ( Прагляд ), яны ўзаемадзейнічаюць з ім, то ўявіць што-то да кантролер і кантролер вырашае, хто што робіць з дадзеныя і вяртае новы від для карыстальніка.
3
дададзена
@zeppelin Магчыма, усё змянілася, але некалькі гадоў таму, калі я праходзіў праз MVC падручнікі і гледзячы на ​​шаблоны MVC ў VS, я, здаецца, узгадваю класы, званыя «ViewModel» у тэчцы Models. Яны не былі на самай справе ViewModels у тым жа сэнсе, як MVVM ViewModels хоць. Абодва аб'екта былі атрыманы дадзеныя для View, але MVVM ViewModels часта робяць шмат працы, якая знаходзіцца ў кантролеры MVC.
дададзена аўтар Rachel, крыніца
Я лічу, што цытата з «іншага адказу» надта спрошчаны і, магчыма, недакладнага. «Дадатак» у гэтай цытаце мае на ўвазе, бізнес-логіку, і калі так, вы не ставіце бізнес-логіку ў VM ў MVVM, ні М у MVC. Аўтар цалкам прапусціў ўсю кропку V ст MVVM, дзе вы звычайна абмяжоўваюць аб'ём кода, за так што яны наўрад ці «вельмі дружалюбны інтэрфейс». VM не мае велізарную працу. Як ужо згадвалася абмежаваць колькасць бізнэс-логікі размешчаны там
дададзена аўтар MickyD, крыніца
«Логіка прыкладання, як правіла, знаходзіцца ў ViewModels, якія лічацца часткай M ў MVC» Як гэта так? M ў MVC ўтрымлівае толькі мадэлі (звычайна класы POCO), я думаю, што логіка прыкладання знаходзіцца ў кантролеры? Папраўце мяне, калі я памыляюся.
дададзена аўтар zeppelin, крыніца
<�Р> Ці азначае гэта, канцэпцыя MVVM/прывязкі дадзеных проста не адносіцца да вэб-прыкладанняў кліент-сервер?

Не, вы можа прымяніць шаблон MVVM для вэб-прыкладанняў, кліент-сервер.

На самай справе Asp.Net MVC на самай справе выгляд сапраўды выкарыстоўвае гэтую мадэль - калі кантролер стварае выгляд, ён можа прайсці ў «выгляд-мадэль». Гэты пункт гледжання-мадэль часта з'яўляецца аб'ект дадзеных ПОКИ з усімі дадзенымі, а канкрэтныя патрэбы выгляду, намаляванымі ад мадэлі (баз дадзеных). Выгляд выкарыстоўвае гэтыя дадзеныя для адлюстравання старонкі HTML.

MVVM на вікіпедыі кажа, што гэта было ўведзена Microsoft з WPF. У прыватнасці, выгляд звязваецца з ўласцівасцямі на выгляд-мадэлі. Выгляд-мадэль затым адлюстроўвае гэта ў базу дадзеных. Згодна з гэтым азначэнні, то, Asp.Net дакладна не супадаць. Кліенцкія рамкі як knockout.js і vue.js падтрымліваюць гэты від 2-палосная звязвання са ўласцівасцямі выгляд-мадэлі.

Усе гэтыя мадэлі заснаваныя на фантастычным MV * ўзор. Першапачаткова ён быў названы шаблон праектавання MVC. Так што гэта сапраўды такая ж карціна, як Asp.Net MVC тады? На самай справе, не зусім. Кантролер азначае нешта зусім іншае, каб пачаць з (гл MVC на вікіпедыі ). Арыгінальны кантролер MVC апрацоўвае ўвесь карыстацкі ўвод непасрэдна не праз зрок. Па-другое, арыгінальны шаблон MVC быў распрацаваны для GUI настольных прыкладанняў і Asp.Net MVC адаптаваны шаблон для выкарыстання ў вэб-дадатак кліент-сервер. Кантролер ASP.Net ўяўляе сабой набор HTTP канчатковых кропак, HTML-старонка на баку кліента можа трапіць (напрыклад, форма слупа, старонка-навігацыя, AJAX).

Такім чынам, ёсць шмат мадэляў M-нешта-V і агульная карціна часта называюць шаблон праектавання MVC.

Там у адзін важнейшы маршчын: на баку кліента супраць боку сервера. Мы ўвялі багатыя на баку кліента JavaScript рамкі і фантастычны MV * ўзор вялікі тут. Так што цяпер мы маглі б мець нешта накшталт: на баку кліента View-Model-ServerHTTPEndPoints і на боку сервера ServerHTTPEndPoints-ServerModel. Сервер-канцавыя ставіцца да кантролераў Asp.Net або эквівалент у любой вэб-фреймворк або мова праграмавання, які вы выкарыстоўваеце. З сервернай боку пункту гледжання, усё на баку кліента HTML з'яўляецца меркаванне. Мадэльныя перамовы на баку кліента на сервер AJAX API (HTTP канчатковыя кропкі) для сінхранізацыі дадзеных або выклікаць яшчэ два крокі. ServerModel звычайна з'яўляецца базай дадзеных. У накаўце/ве, а не на бок кліента «мадэль», было б ViewModel. Калі вы выкарыстоўваеце рэагаваць/вю з Redux/патоку, то на баку кліента будзе View-ViewModel-Model-ServerHTTPEndPoints, дзе мадэль будзе ў Redux/Крамы патоку. Акрамя таго, часта на боку сервера, паслуга ўведзена: ServerHTTPEndPoints-Сэрвіс-мадэль. Гэты спосаб выпрабаванні блок можа ўдарыць службу напрамую, а не распальвання ўвесь вэб-сервер і робіць HTTP злучэння.

0
дададзена
<�Р> Ці азначае гэта, канцэпцыя MVVM/прывязкі дадзеных проста не адносіцца да вэб-прыкладанняў кліент-сервер?

Не, вы можа прымяніць шаблон MVVM для вэб-прыкладанняў, кліент-сервер.

На самай справе Asp.Net MVC на самай справе выгляд сапраўды выкарыстоўвае гэтую мадэль - калі кантролер стварае выгляд, ён можа прайсці ў «выгляд-мадэль». Гэты пункт гледжання-мадэль часта з'яўляецца аб'ект дадзеных ПОКИ з усімі дадзенымі, а канкрэтныя патрэбы выгляду, намаляванымі ад мадэлі (баз дадзеных). Выгляд выкарыстоўвае гэтыя дадзеныя для адлюстравання старонкі HTML.

MVVM на вікіпедыі кажа, што гэта было ўведзена Microsoft з WPF. У прыватнасці, выгляд звязваецца з ўласцівасцямі на выгляд-мадэлі. Выгляд-мадэль затым адлюстроўвае гэта ў базу дадзеных. Згодна з гэтым азначэнні, то, Asp.Net дакладна не супадаць. Кліенцкія рамкі як knockout.js і vue.js падтрымліваюць гэты від 2-палосная звязвання са ўласцівасцямі выгляд-мадэлі.

Усе гэтыя мадэлі заснаваныя на фантастычным MV * ўзор. Першапачаткова ён быў названы шаблон праектавання MVC. Так што гэта сапраўды такая ж карціна, як Asp.Net MVC тады? На самай справе, не зусім. Кантролер азначае нешта зусім іншае, каб пачаць з (гл MVC на вікіпедыі ). Арыгінальны кантролер MVC апрацоўвае ўвесь карыстацкі ўвод непасрэдна не праз зрок. Па-другое, арыгінальны шаблон MVC быў распрацаваны для GUI настольных прыкладанняў і Asp.Net MVC адаптаваны шаблон для выкарыстання ў вэб-дадатак кліент-сервер. Кантролер ASP.Net ўяўляе сабой набор HTTP канчатковых кропак, HTML-старонка на баку кліента можа трапіць (напрыклад, форма слупа, старонка-навігацыя, AJAX).

Такім чынам, ёсць шмат мадэляў M-нешта-V і агульная карціна часта называюць шаблон праектавання MVC.

Там у адзін важнейшы маршчын: на баку кліента супраць боку сервера. Мы ўвялі багатыя на баку кліента JavaScript рамкі і фантастычны MV * ўзор вялікі тут. Так што цяпер мы маглі б мець нешта накшталт: на баку кліента View-Model-ServerHTTPEndPoints і на боку сервера ServerHTTPEndPoints-ServerModel. Сервер-канцавыя ставіцца да кантролераў Asp.Net або эквівалент у любой вэб-фреймворк або мова праграмавання, які вы выкарыстоўваеце. З сервернай боку пункту гледжання, усё на баку кліента HTML з'яўляецца меркаванне. Мадэльныя перамовы на баку кліента на сервер AJAX API (HTTP канчатковыя кропкі) для сінхранізацыі дадзеных або выклікаць яшчэ два крокі. ServerModel звычайна з'яўляецца базай дадзеных. У накаўце/ве, а не на бок кліента «мадэль», было б ViewModel. Калі вы выкарыстоўваеце рэагаваць/вю з Redux/патоку, то на баку кліента будзе View-ViewModel-Model-ServerHTTPEndPoints, дзе мадэль будзе ў Redux/Крамы патоку. Акрамя таго, часта на боку сервера, паслуга ўведзена: ServerHTTPEndPoints-Сэрвіс-мадэль. Гэты спосаб выпрабаванні блок можа ўдарыць службу напрамую, а не распальвання ўвесь вэб-сервер і робіць HTTP злучэння.

0
дададзена