MVC-тің үйренетін MVVM-нің адамдарға арналатын оқулық/жүріс-тұрысы?

Мен WPF-де MVVM дизайнымен жұмыс істеп жүргенмін, бірақ жақында мен ASP.Net-да бірдеңе істеуді сұрадым. Мен MVC-ні қолданып көргім келеді, себебі мен MVVM-ды оқыған кезде көп нәрсеге сілтейтінін көрдім, бірақ бұл туралы ештеңе білмеймін.

MVVM-ді MVC-мен жақсы білетін адамға түсіндіруге болатын көптеген сайттарды таба аламын, бірақ MVVM-ге қолданылатын адамға MVC-ді түсіндіретін жақсы нәрсе таба алмаймын. MVC-ді өз бетімен түсіндіретін сайттар бар, бірақ мен оларды түсіну қиынға түседі, өйткені менің ақыл MVVM логикасын қолдануға тырысады.

Мәселен, MVVM-нің біреуі түсінгендіктен МВК-ны түсіндіре алатын жақсы сайттар бар ма? Немесе біреу маған мұнда түсіндіре ала ма?

2
@SteveGreatrex деп ойладым, дегенмен, MVVM негізінен WPF/Silverlight әзірлеуге арналған, сондықтан байланыстыру жүйесі жұмыс істейтіндіктен ASP.Net-мен пайдалану үшін оңтайландырылмаған
қосылды автор Rachel, көзі
Біздің тақырып бойынша нұсқауларымызға сәйкес, « Кейбір сұрақтар әлі де тақырыптан тыс, тіпті олар бір ... сұрайтын сұрақтар кітабын, құралын, бағдарламалық жасақтама кітапханасын, оқулықты немесе басқа жерден тыс ресурсты ұсынбайды ... «
қосылды автор Robert Columbia, көзі
Неліктен түсініктеме өткізіп, веб-әзірлемелеріңізде MVVM-ді қолдануды жалғастырыңыз: knockoutjs.com
қосылды автор Steve Greatrex, көзі

2 жауаптар

MVVM үлгісінен келіп, MVC үлгісінен басталатын кезде (әсіресе ASP.NET MVC) MVC-дегі «M» MVC емес, «MVC» үлгісін «VMVC»/em>, MVVM-дегі «M» сөзі. Шын мәнінде ViewModel сәйкес келеді. Мен бұл MVC-тің жалпы анықтамасын білдіретінін білмеймін, бірақ бұл шындық және ASP.NET MVC-мен жұмыс істегенде ең дұрыс және ең жақсы тәжірибе болып табылады, (кейде дәл осы мәселеде сипатталған мәселенің себебі болып табылады)).

Мен әдетте Visual Studio үлгілерінің біреуінен ASP.NET MVC жобасын жасаған кезде жасаймын, жасаған қалтаны «Model» дегенді «ViewModel» деп атауға болады. Егер үлгі кодын «Модельдер» дегенмен көретінін байқасаңыз, олар тікелей көріністерге қолданылатынын, кіріс жарамдылығы туралы деректер аннотациялары бар екенін, көрсету пішімдерін және көріністегі өріс атауын келтіруі мүмкін екенін көресіз. Бұл аннотациялар HTML жасау үшін HTML анықтамалықтары тарапынан тікелей пайдаланылады және домен немесе бизнес логикасын көрсетпейді. Басқаша айтқанда, олар ViewModels-ді WMF/Silverlight/Phone7 ішіндегі XAML көріністеріңіз үшін MVVM-те ViewModels-ді пайдаланған кезде Razor/HTML көрінісі үшін бірдей мағынада.

«Модель» домені MVC үлгісінің бөлігі емес, өйткені ол MVVM үлгісіне кіреді. Осылайша, қысқартулар MVVM-ді MVC-мен салыстыру кезінде бірнеше жаңылыстырады. Өте оңайлатылған «аударма кестесі» ретінде айта аламыз:

MVVM                         MVC
----                         ---
M  -> Domain Model           not part of the pattern
V  -> View (XAML)            V -> View (HTML, Razor)
VM -> ViewModel              M -> ViewModel
not part of the pattern      C -> Controller

MVVM-гі контроллердің сәйкес нәрсесі туралы сенімді емеспін. MVC-де контроллер әдетте ViewModels нысандарына домендік нысандарды аударатын модуль болып табылады, содан кейін көріністерге (және керісінше) - схемалық:

ControllerActionForGetRequest ( params )
{
     objects = GetDomainObject(params)    - entities, queryables or DTOs
     viewModel = CreateViewModelFromDomainObjects(objects)
     view = CreateViewFromViewModel(viewModel)
}

ControllerActionForPostRequest ( viewModel )
   //ModelBinder makes "viewModel" from HTML input fields, etc
{
     if (IsValid(viewModel))
     {
         data = CreateDomainObjectsOrDtosFromViewModel(viewModel)
         WriteData(data)  - back to data store
         RedirectToActionForGetRequest
     }
     else
         GoBackToView
}

MVVM-тің бұл бөлігінде қандай жауапкершілік бар? Мен сенімді емеспін. ViewModel репозиторийге сілтеме жасайтын конструкцияларды көрдім, өз қасиеттерін толтыру үшін Model (Domain Model) параметрін шығарып, ICommand өңдегіштері арқылы репозиторийге қайта жазады. Бұл MVVM-дағы ViewModels-дың MVC-дегі ViewModels-лері қарапайым, ал MVVM-де «контроллер» болу жауапкершілігі бар: олар қарапайым деректерді қамтамасыз ету және пішімдеу үшін метадеректер бар көп немесе аз ғана мүлік пакеттері.

Қорытынды ескерту ретінде: Мен MVVM үлгісін WPF-мен MVC үлгісіне қарағанда әлдеқайда қиын деп таптым. ASP.NET MVC жерүсті MVC үлгісіне деген сүйіспеншілікті дамытуға арналған және бұл жолды қалдырудың қажеттілігі жоқ (немесе мүмкін емес). Бұл wpf үшін емес. Түпнұсқалық дизайн MVVM үлгісімен емес, көріністермен және кодталған файлдармен жасалған. Мен ViewModel-ге қарау элементтерін немесе атрибуттарын байланыстыру өте қиын болған жағдайларды жиі кездестірдім және бұл кодтық файлдармен жұмыс істеу әлдеқайда оңай болды, осылайша MVVM қағидаларын біраз бұзды.

MVVM үлгісімен тәжірибеңіз болған кезде MVC-ге кіруге ешқандай қиындықтар болмайды деп ойлаймын.

5
қосылды
Жақсы түсініктеме, әсіресе MVC модельдері мен MVVM модельдері арасындағы айырмашылықты көрсете білу. Мен екі М-ны бірдей деп күткенімнің себебін түсіндім. Мен MVC оқытуды бастадым, енді MVC-дің M + C MVVM-дің VM және MVC-дің M < код> MVVM-дің M және VM бөліктерінің қосындысын қамтиды.
қосылды автор Rachel, көзі
MVC-дің M деген сөзінде MVVM-дің VM -де табылған қасиеттері бар, бірақ барлық функционалдылық жойылған (ол MVVM-дің < код> M ). C - деректерге қол жеткізу, кеңейтілген бизнес ережесін тексеру және т.б. сияқты MVVM-дің VM ішінде табуға болатын функционалдылық.
қосылды автор Rachel, көзі
@Rachel: Жақсы, сіз VM = M + C екенін растайсыз. Мен бұл туралы сенімді емес едім. Екінші бөлікте: MVVM (домен үлгісі) M сөзін MVC ішіндегі ViewModel ішінен толығымен сыртқа шығарар едім. Мысалы, бұл хабардағы StaffViewModel ( stackoverflow.com/q/8010566/270591 ) бұл MVVM-ға ұқсас емес пе?) антипаттерн болып табылады, себебі 1) веб-парақта PropertyChanged оқиғасы жоқ, ол моделі жаңартуға көмектеседі және 2) қауіпсіздік себептері бойынша: пайдаланушыға қарағанда модель байластырғышқа көбірек қасиеттерді көрсету керек беттегі өңдеу - бұл ықтимал тәуекел (HTTP пошта сұрауларын өңдеу).
қосылды автор Slauma, көзі

Rachel, Мен MVVM-ке қапталғандарға бағытталған ASP.NET MVC сайттарына кірмедім, бірақ бірінші қолынан тәжірибемді ASP.NET MVC музыкалық дүкені мүлдем керемет болды.

I am originally a WebForms developer, and I can absolutely attest to having a certain technology in the back of your mind while learning another, forcing your logic to shift a certain way. That was especially difficult going from Webforms -> MVC. The best advice I have is to just analyze every aspect of that Music Store tutorial as a separate entity.

Сәттілік, мен бұл көмектеседі деп үміттенемін.

2
қосылды
Мен бұрын кодты жүктеп алдым және оны жасау кезінде қателер аламын. Мен күшті веб-әзірлеуші ​​емеспін, сондықтан оны түзетуге көп уақыт жұмсамадым, бірақ мен оны тағы бір рет қарап шығуға болады.
қосылды автор Rachel, көзі
Үлкен MVC оқу құралы үшін +1. Мен кодты тек оны оқудан гөрі көбірек білуіңізге келісемін, бірақ мен жұмыс істейтінімді көру үшін алдымен дайын өнімді көргім келеді. Сілтемедегі код қатесіз жұмыс істейді, сондықтан бұрын кодтың ескі нұсқасын жүктеп алуым керек болды.
қосылды автор Rachel, көзі
@Rachel Мен шын мәнінде оқу құралы арқылы жетістікке жеткен кезде кодты жазуды оңай деп таптым. Кодыңызды жазып жатқанда көп нәрсеге үйренуге болады, себебі жай ғана жазылған кейбір бастапқы кодты оқып шығуға қарсы. Өзіңіздің қателіктеріңіз туралы біле беріңіз, мүмкін, мен көмектесе аламын.
қосылды автор user596075, көзі