Factory - Wie?

19/11/2009 - 19:37 von Markus Fischer | Report spam
Hallo Michael und Frank,

zunàchst kann ich nur sagen Danke für die Hilfe.
@Frank, Notation, ja du hast recht, mache ich noch.

Eventproblem gelöst
siehe Bild.
http://www1.minpic.de/bild_anzeigen.php?id”661&keyu036849&ende
http://www1.minpic.de/bild_anzeigen.php?id”662&key&288877&ende


Das Problem habe ich erkannt.
Für die Lösung habe ich Probleme.

Geschaut habe ich bei PGK Webcast.
Man kann da viele Ideen abschauen, leider werden teils zuviele Utilities
eingesetzt.
- wie CurrentVersion - lose Kopplung.

Frage a) Ist es nun korrekt ein Object vom IBus, IMES anzulegen?
Beim new Operator muss ich wissen, welches Object angelegt werden
muss.
Das habe ich verstanden.
Deshalb muss ein Factory verwendet werden.
Frage b) Wie, wo ist da der Vorteil?
Wie wird das gemacht?
Wo sage ich dass ich ein DummyMES habe?

Danke für Tipps.

Kann man das einfacher machen?
var globalContext = AppContext.InitializeNew();
public static IAppContext InitializeNew();
Die AppContext soll ja die Factory bei PKG suggerieren, warum static?
Vielleicht kann es jemand einfach erklàren, Beispiel geben.

Zunàchst auch ohne User etc.

Grüße Markus

private void Test_Click(object sender, EventArgs e)
{
IBus IBus = new DummyBus();
// // RS232
// // TCP/IP
IMES IMES = new DummyMES();
// // Text
// // XML

//BusDummy Bus = new BusDummy();
// RS232
// TCP/IP
//MESDummy MES = new MESDummy();
// Text
// XML

//BusDummy busdummy;
//busdummy = IBus as BusDummy;
//busdummy.EvHaContentDummy += new
BusDummy.MyEventHandlerDummy(busdummy_EvHaContentDummy);

IBus.EvHaContent += new MyEventHandler(IBus_EvHaContent);
IMES.SetBusSystem(IBus);
IMES.SetCode("ID56342542536");
IMES.Send();
}
 

Lesen sie die antworten

#1 Michael v. Fondern
19/11/2009 - 21:53 | Warnen spam
Hallo Markus,


Frage a) Ist es nun korrekt ein Object vom IBus, IMES anzulegen?



ich verstehe die Frage nicht - was sollte daran nicht korrekt sein?

Beim new Operator muss ich wissen, welches Object angelegt
werden muss.
Das habe ich verstanden.
Deshalb muss ein Factory verwendet werden.

Frage b) Wie, wo ist da der Vorteil?



Orthogonalitàt. Das bedeutet, eine beliebige Unterklasse von IBus làsst
sich mit einer beliebigen Unterklasse von IMES kombinieren. Kommen
weitere "IBus"-Varianten hinzu, braucht man im Idealfall keine der
IMES-Ableitungen zu àndern, und umgekehrt.

Irgendwo in deinem Programm musst du natürlich zur Laufzeit die
Entscheidung fàllen, welches Bussystem du verwendest und welches MES.
Diese Info wertest du dann in der jeweiligen Factory-Methode aus - und
nur da. Dann ist dies auch die einzige Stelle, an der du im
Erweiterungsfall ggf. noch "Hand anlegen" musst. Hier mal ein sehr
einfaches Beispiel, das du sicher verstehst:

http://www.devarticles.com/c/a/C-Sh...C-sharp/1/

Mittels Reflection kann man das oft auch so bauen, das man in der
Factory keinen "switch-case" braucht, sondern stattdessen z.B. den
Klassennamen als String übergibt und mit Type.GetType sowie
System.Reflection.ConstructorInfo und Invoke arbeitet (aber probier's
vielleicht erst mal auf einfache Weise.

Grüße

- Michael -

Ähnliche fragen