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:
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
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