Avatar billede kkaen Nybegynder
03. februar 2009 - 08:10 Der er 17 kommentarer og
1 løsning

Model/View/Controller

Jeg vil gerne lave et system, som er opbygget efter Model/View/Controller-princippet.
Selve systemet består af en WPF-del, en WCF-del og en IIS-del. WPF-delen kører lokalt ved brugeren, og benytter WCF-delen til kommunikation med IIS-delen. Jeg går ud fra, at IIS-delen er model-delen i MVC, WCF er Controller-delen i MVC og at WPF er view-delen i MVC. Men jeg vil også give mulighed for en netside-adgang til systemet. Netsiden er lavet i .Net, og består naturligvis både af det visuelle samt diverse klasser og metoder, da en netside ikke kan benytte WCF. Men da en netside er en serverside teknologi, kan jeg jo ikke placere den på samme niveau som WPF. Derfor vil jeg placere den i samme namespace som WCF (da netsiden jo også indeholder de omtalte klasser og metoder).
Kan denne opdeling betragtes som korrekt? Og hvordan skal denne konstruktion vises i et klasse diagram?
Min egen ide til klassediagram er, at model-delen i MVC består af IIS, som jeg har placeret i en "sektion" for sig selv nederst i klassediagramet. Controller-delen består af WCF-delen samt netsiden, som jeg har placeret i en "sektion" for sig selv midt i klassediagramet. View-delen består af WPF-delen, som jeg ligeledes har placeret i en "sektion" øverst i klassediagramet.

Jeg er meget i tvivl om min opdeling er korrekt. Nogle ville nok sige, at netsiden ikke hører til i controller-delen, men derimod i view-delen. Kan dette overhovedet vises i et klassediagram, som er opdelt i sektioner efter MVC-princippet, hvis man ikke ligefrem opdeler selve aspx-siden i en view-del og en klasse/metode-del, så man kan splitte aspx-siden op, så den derved BÅDE står i View- og Controller-delen?

Jeg vil meget gerne se noget online dokumentation for løsningen.
Avatar billede kkaen Nybegynder
03. februar 2009 - 08:51 #1
Aspx-siden indeholder forresten en Windows Form. Dette er vel også et argument for, at siden reelt skal findes i controller-delen?
Avatar billede kkaen Nybegynder
03. februar 2009 - 08:51 #2
Aspx-siden indeholder forresten en Windows Form. Dette er vel også et argument for, at siden reelt skal findes i controller-delen?
Avatar billede arne_v Ekspert
03. februar 2009 - 15:12 #3
Du kan ikke dele hele din app ud i MVC.

Jeg vil sige:
V = de kontroller som vises
C = den kode som kaldes naar brugeren goer noget
M = dine client side data
alt sammen client side.

Server side er ikke en del af MVC.
Avatar billede kkaen Nybegynder
03. februar 2009 - 20:59 #4
Er det helt sikkert, at modelen ikke er serverside? Det var da ellers den klare opfattelse, jeg havde. Findes der noget online dokumentation på dette (og alt det andet)? :-)
Avatar billede arne_v Ekspert
03. februar 2009 - 21:15 #5
Ja.

Det er svært at finde noget. Men ihærdig googling fandt dette:

http://blog.hariso.com/post/Model-View-Controller-(MVC)-and-SOA-Architecture-Diagram.aspx

Det er ikke nogen god tegning. De har ikke engang trekant flow i MVC rigtig, men den viser klart MVC som en frontend ting - med en separat backend.
Avatar billede kkaen Nybegynder
03. februar 2009 - 22:38 #7
Jeg må overgive mig, og tildels give dig/jer ret. Modellen kan godt være repræsenteret af klasser. Vel at mærke af klasser, som blot sørger for tilgangen til data (hvilket jeg ellers ville anskue som controller-delen). Altså skal klasserne ikke virke som objekter, der kan f.eks. kan indeholde data og som kan gemmes.
Dette fænomen må være en såkaldt nymodens drejning. For det var ikke sådan, jeg huskede MVC.

Som argumentation til min hidtidige opfattelse:

http://en.wikipedia.org/wiki/Model-view-controller
"...model represents the information (the data) of the application; ..."

http://www.google.dk/imgres?imgurl=http://betterexplained.com/wp-content/uploads/rails/mvc-rails.png&imgrefurl=http://betterexplained.com/tag/ruby&h=472&w=500&sz=11&tbnid=EvqbmUeXBKLLVM::&tbnh=123&tbnw=130&prev=/images%3Fq%3Dmvc%2Bpicture&hl=da&usg=__bXLLpSpDmrIBetQryHMYt-XTlvI=&sa=X&oi=image_result&resnum=1&ct=image&cd=1
"...Models are Ruby classes. They talk to the database, store and validate data, perform the business logic and otherwise do the heavy lifting. They're the chubby guy in the back room crunching the numbers....Views are what the user sees: HTML, CSS, XML, Javascript, JSON. They're the sales rep putting up flyers and collecting surveys, at the manager's direction. Views are merely puppets reading what the controller gives them. They don't know what happens in the back room..."

http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=anatomy_010_04.html
"you can use Flex to implement the entire MVC architecture on the client"

http://ctrl-shift-b.blogspot.com/2007/08/interactive-application-architecture.html
" Model refers to the data and business functionality of the application. This is often represented by a Domain Model where objects seek to model real world entities by representing their properties and behavior.

The View is the visual representation of the Model and is comprised of the screens and widgets used within an application.

The Controller is a component which responds to user input such as data entry and commands issued from a keyboard or mouse. Its responsibility is to act as a bridge between the human and the application, allowing the user to interact with the screen and data."

http://richnewman.wordpress.com/2008/02/23/model-view-controller-explained-introduction-to-cabscsf-part-22/
"...A Model class contains the data to be displayed. This can be a simple data cache, although it may be a full domain model (classes containing data plus associated business functionality)...."

http://mdpopescu.blogspot.com/2009/01/mvc-explained.html
"Domain model - aka tables / records / plain C# objects. Can contain "model logic", like a GetMainImage() method on the Product object that can decide to "promote" an image as main if none of those associated with the product have been flagged as such."

http://www.codeproject.com/KB/cs/model_view_controller.aspx
"The model:
While coding this basic example in order to explore MVC pattern I thought of books obviously. Below displayed is a basic book class implementation."

Jeg håber, at det er til at hitte rede i argumentationsteksten samt kilderne dertil :-)
Avatar billede kkaen Nybegynder
03. februar 2009 - 22:40 #8
(i mange af de eksempler, i har henvist til med links i tidligere indlæg, de benytter da typisk en mellemligende teknologi. F.eks. SOA. Jeg kender ikke til SOA, men teknologien indeholder tilsyneladende en funktionalittet, som får helheden til at fremstå på en anderledes måde end den typiske MVC...i hvert fald som jeg husker den, og som jeg har fundet diverse link til)
Avatar billede kkaen Nybegynder
03. februar 2009 - 22:41 #9
(...eller f.eks. "Flex"...)
Avatar billede arne_v Ekspert
03. februar 2009 - 22:43 #10
Jeg valgte SOA eksempler fordi du sagde at du brugte WCF - og derfor må din løsning enten være SOA eller ihvertfald være tæt på.
Avatar billede arne_v Ekspert
03. februar 2009 - 22:46 #11
M er sådan set stadigvæk data - eller for at være mere præcis - et interface til data.

Din WCF client side proxy code repræsenterer din model. Det er usynligt for C og V om den faktisk indeholder data eller henter data et helt andet sted fra.

Den henter så data et helt andet sted fra.

Du kan kalde det en bivirkning ved encapsulation !
Avatar billede kkaen Nybegynder
04. februar 2009 - 09:58 #12
Okay - så er vi sådan set enige ;-)

Men nu tilbage til den oprindelige problemstilling.
Kan aspx-siden (hvilket både er html og codebehind) repræsenteres i klassediagrammet under inddelingen, hvor Controller-delen er, eller skal den repræsenteres under inddelingen, hvor view-delen er?
Avatar billede arne_v Ekspert
05. februar 2009 - 02:16 #13
Nu er jeg lidt lost hvor ASP.NET kommer ind i billedet.

Med din fat client / RIA som taler med en WCF service, så har du både M, V og C i client. Og server skal så beskrivese som noget helt andet. SOA, BLL & DAL lyder som relevant koncepter.

Hvis vi snakker en mere almindelig ASP.NET side så er vi nok ovre i:

.aspx = V
.aspx.cs = C
.cs = M

Men MVC er ikke en specielt god beskrivelse af web forms.

.aspx + .aspx.cs = PL
.cs = BLL
.cs = DAL

eller

.aspx = PL
.aspx.cs = CL
.cs = BLL
.cs = DAL

passer bedre med web forms.
Avatar billede kkaen Nybegynder
05. februar 2009 - 07:13 #14
Men asp.net kan da også godt benyttes i MVC-sammenhæng. Dokumentation herfor kan ses på f.eks.:

http://www.google.dk/imgres?imgurl=http://betterexplained.com/wp-content/uploads/rails/mvc-rails.png&imgrefurl=http://betterexplained.com/tag/ruby&h=472&w=500&sz=11&tbnid=EvqbmUeXBKLLVM::&tbnh=123&tbnw=130&prev=/images%3Fq%3Dmvc%2Bpicture&hl=da&usg=__bXLLpSpDmrIBetQryHMYt-XTlvI=&sa=X&oi=image_result&resnum=1&ct=image&cd=1

Hvor der bl.a. står:
"Views are what the user sees: HTML, CSS, XML, Javascript, JSON."

Men mange af de forkortelser, du skriver om, dem aner jeg desvære ikke noget om. Men din beskrivelse af asp.net-side-modelen ser da fin nok ud. Findes der noget dokumentation online, som understøtter den opdeling, du har beskrevet under asp.net-siden?
Avatar billede arne_v Ekspert
06. februar 2009 - 01:10 #15
Udover ASP.NET web forms findes der ASP.NET MVC aom pussigt nok er MVC !  :-)
Avatar billede kkaen Nybegynder
30. december 2010 - 16:03 #17
Arne_V ->
Lægger du et "svar"?
Avatar billede arne_v Ekspert
30. december 2010 - 17:51 #18
yes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester