[C#/.Net] MVC implementatie

Pagina: 1
Acties:
  • 278 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bint
  • Registratie: Juli 2002
  • Laatst online: 23:22
Ik had een vraagje over het scheiden model, view en controller. Ik heb er aardig wat over gelezen, maar toch ben ik er niet zeker van of ik het goed doe.

Ik heb al het volgende gecreeerd:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using Model;
namespace View;
{
  public class View
  {
    private MainModel model;
    private MainController controller;

    public View()
    {
      InitializeObservables();
      controller = new MainController(model);
    }

    private void InitializeObservalbes()
    {
      model = new MainModel();
      model.UpdateEvent += new MainModel.UpdateHandler(model_UpdateEvent);
    }

    private void model_UpdateEvent()
    {
        string status = model.GetStatus();
    }
  }
}


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace Controller
{
    public class MainController
    {
        MainModel model;
        
        public MainController(MainModel m)
        {
            this.model = m;
        }

        public void Activate()
        {       
            m.Activate();     
        }
    }
}


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace Try2.Model
{
    public class MainModel:ModelInterface
    {   
        public delegate void UpdateHandler(object sender);
        public event UpdateHandler UpdateEvent;
     
        public MainModel()
        {
        } 

        public void Activate()
        {
            Update();
        }

        public string GetStatus()
        {
          return "status";
        }

        private void Update()
        {
          if(this.UpdateEvent != null)
                this.UpdateEvent();
        }
    }
}


Dit doet in het kort het volgende:
Ik heb een form(de view), die een controller en model aanmaakt. Model geef ik mee aan de controller, zodat die daar ook mee kan communiceren. Op het moment dat ik "activeer" in de UI, dan roept hij controller.Activate() aan. Die geeft weer een signaal aan het model, waarna het activate commando verwerkt wordt. Hierop wordt er een event gegenereerd, waarop de view ook weer geabonneerd is. Als dat event gegenereerd is, krijgt het model dus een seintje, zodat die weer in het model de status kan opvragen.

Heb ik het MVC principe zo goed geimplementeerd? Of moet ik ook nog de view mee doorgeven aan de controller, zodat de controller nog bepaalde dingen voor de UI kan afhandelen? bijvoorbeeld om dan door te geven welke knoppen er uit moeten, of dat er een update van een label moet komen?

Verder nog een vraagje: is dat event genereren, en vervolgens de info opvragen niet erg omslachtig? Kan ik niet beter een msgType genereren, waarin het soort msg, en dan de data in het event worden meegegeven?

Want het is dadelijk de bedoeling dat in het model beelden uit een camera worden verwerkt, en dat die daarna op een canvas gedisplayed worden. Kan ik dat dus gewoon via events doen, of dus via de GetStatus(in dit geval een string, maar dat kan ook elk ander objectType zijn). Ofwel: wordt er, als er een event wordt verstuurd, het hele object meegekopieerd, of wordt er een pointer naar het geheugen gestuurd.

Ik hoop dat ik zelf voldoende uitgezocht heb, en ik denk dat ik zo ook wel redelijk in de buurt zit, maar ik ben er gewoon niet helemaal zeker van.

Alvast bedankt,
Bas

Memories of yesterday, will grow, but never die


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Even een move naar SEA aangezien het meer over de architectuur van de code gaat i.p.v. daadwerkelijke implementatie.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Voordat je zelf een hele library in elkaar zet, kijk eerst even wat er al gedaan is:

http://mavnet.sourceforge.net/

Dit is een MVC oplossing voor .net die ik in een grijs verleden eens gebruikt heb. Er zullen vast nog wel meer projecten zijn.

[edit]
Ik zie dat je niet bepaald een webapp in elkaar aan het zetten bent.

[ Voor 13% gewijzigd door Alarmnummer op 15-02-2007 06:33 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
MVC is een pattern dat op zich niet zoveel nut heeft in .NET, omdat je in .NET op de model classes de interfaces moet implementeren voor het gebruik van die classes in UI omgevingen. MVC voegt alleen maar meer overhead toe en complexiteit en laat je nog achter met veel werk ook.

In een framework met 0.0 databinding faciliteiten, OK, dan is het nuttig. .NET heeft echter wel databinding dat redelijk werkt, dus is de noodzaak voor MVC niet aanwezig.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 21:44
EfBe schreef op donderdag 15 februari 2007 @ 09:14:
MVC is een pattern dat op zich niet zoveel nut heeft in .NET, omdat je in .NET op de model classes de interfaces moet implementeren voor het gebruik van die classes in UI omgevingen. MVC voegt alleen maar meer overhead toe en complexiteit en laat je nog achter met veel werk ook.

In een framework met 0.0 databinding faciliteiten, OK, dan is het nuttig. .NET heeft echter wel databinding dat redelijk werkt, dus is de noodzaak voor MVC niet aanwezig.
Een MVC concept is handig als je bijv. verschillende UI's hebt op hetzelfde (state)model. Ik noem bijv. een touchscreen UI en een Windows/Office UI die verschillende UI-aspecten met zich meebrengen. Als je MVC zuiver toepast en dan ook goed laat checken (door bijv. een enterprise template) of peer-reviews, dan dwing je ontwikkelaars goed na te denken waar de business logic moet staan.

Meestal zie je veel business logic terugkomen in forms waardoor skinning lastiger wordt :'(

  • EfBe
  • Registratie: Januari 2000
  • Niet online
DrDelete schreef op donderdag 15 februari 2007 @ 16:33:
[...]


Een MVC concept is handig als je bijv. verschillende UI's hebt op hetzelfde (state)model. Ik noem bijv. een touchscreen UI en een Windows/Office UI die verschillende UI-aspecten met zich meebrengen. Als je MVC zuiver toepast en dan ook goed laat checken (door bijv. een enterprise template) of peer-reviews, dan dwing je ontwikkelaars goed na te denken waar de business logic moet staan.
Meestal zie je veel business logic terugkomen in forms waardoor skinning lastiger wordt :'(
GUI logica bouw je in de gui, BL logica niet, maar wat heeft MVC daarmee te maken? Volgens mij niet echt veel. Je kunt dan toch gewoon volstaan met je BL code en 2 guis?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

EfBe schreef op donderdag 15 februari 2007 @ 09:14:
MVC is een pattern dat op zich niet zoveel nut heeft in .NET, omdat je in .NET op de model classes de interfaces moet implementeren voor het gebruik van die classes in UI omgevingen. MVC voegt alleen maar meer overhead toe en complexiteit en laat je nog achter met veel werk ook.

In een framework met 0.0 databinding faciliteiten, OK, dan is het nuttig. .NET heeft echter wel databinding dat redelijk werkt, dus is de noodzaak voor MVC niet aanwezig.
Gaat dit alleen op voor winforms applicaties of ook voor ASP.NET? En hoe praktisch is een third-party MVC eigenlijk in ASP.NET? Je hebt al een soort controller in je code-behind, waarmee je je domein model / service layer aanspreekt.
Alarmnummer schreef op donderdag 15 februari 2007 @ 06:30:
Voordat je zelf een hele library in elkaar zet, kijk eerst even wat er al gedaan is:

http://mavnet.sourceforge.net/

[..]
Dat Maverick.NET bijvoorbeeld ziet er in vergelijking met wat er standaard in ASP.NET mogelijk nogal crippled uit. Waarom zou je zoiets willen gebruiken (serieuze vraag)?

[ Voor 20% gewijzigd door Verwijderd op 15-02-2007 19:54 ]

Pagina: 1