ich bin ja immer sehr mißtrauisch gegenüber dem Interface-Kult, den c#-ler so gerne treiben.
Nach meiner Erfahrung meist ein Verstoß gegen das Kiss-Prinzip, also eine unnötige Verkomplizierung.
ZB solange es nur eine einzige Implementierung eines Interfaces gibt, darf es ühaupt kein Interface geben.
Ein Interface darf man erst extrahieren, wenn tatsächlich eine alternative Strategie für dieselbe Funktionalität implementiert wird (etwa, wenn einer hergeht, und einen DirectX- oder OpenGL-Renderer bastelt) - vorher nicht!
Was hier also getrieben wird, ist "vorauseilende Verkomplizierung", und verstößt gegen das Kiss-Prinzip, nach dem alles so einfach wie möglich gemacht werden soll.
Aber seisdrum - c#ler glauben das gewöhnlich nicht. jdfs, wenn Interface, dann auch richtig polymorph, und da fund ich dieses pseudo-polymorphe Fundstück im Renderer:
Ich nenne das "pseudopolymorph", weils eben keine allgemeine IBitmap.Draw() - Methode gibt, sondern intern wird doch das "gekapselte" (isses ja nun nicht mehr) Objekt rausgeholt, und nach Ergebnis einer Typüberprüfung wird verfahren.
Also der Renderer ist nur mit IBitmap-Dingern kompatibel, wo olle Drawing.Bitmap drinne ist - also im Grunde hat das Interface garnix entkoppelt, und eine einfacherere Architektur hätte gleich und ohne Interface die Drawing.Bitmap übergeben, dann braucht man nicht erst zu prüfen, ob eine drin ist.
Also meiner Ansicht nach sollten die Interfaces alle raus, und die Geschichte einfach und erstmal nur für GDI implementieren.
Aber da fürchte ich, wird kaum was übrig bleiben: ein Fenster, was ausserhalb der Window-Message-Queue läuft, 2 Dauer-Threads, die immer rund laufen - (das hätten vlt. auch Timer geschafft - es gibt glaub auch hoch-präzise Timer?)
Alles annere ist in System.Drawing doch bereits enthalten, also
Nach meiner Erfahrung meist ein Verstoß gegen das Kiss-Prinzip, also eine unnötige Verkomplizierung.
ZB solange es nur eine einzige Implementierung eines Interfaces gibt, darf es ühaupt kein Interface geben.
Ein Interface darf man erst extrahieren, wenn tatsächlich eine alternative Strategie für dieselbe Funktionalität implementiert wird (etwa, wenn einer hergeht, und einen DirectX- oder OpenGL-Renderer bastelt) - vorher nicht!
Was hier also getrieben wird, ist "vorauseilende Verkomplizierung", und verstößt gegen das Kiss-Prinzip, nach dem alles so einfach wie möglich gemacht werden soll.
Aber seisdrum - c#ler glauben das gewöhnlich nicht. jdfs, wenn Interface, dann auch richtig polymorph, und da fund ich dieses pseudo-polymorphe Fundstück im Renderer:
C#-Quellcode
- public void DrawBitmap(IBitmap bmp, Artentus.GameUtils.Graphics.Rectangle rect) {
- if(!rendering)
- throw new InvalidOperationException("Zeichenvorgänge sind nur zwischen \"BeginRender\" und \"EndRender\" gültig.");
- Bitmap gdiBmp;
- if(bmp is GDIBitmap)
- gdiBmp = (bmp as GDIBitmap).GetBitmap();
- else
- throw new ArgumentException("Diese Bitmap ist nicht kompatibel.");
- device.DrawImage(gdiBmp, GDIHelper.ConvertRectangle(rect));
- }
Also der Renderer ist nur mit IBitmap-Dingern kompatibel, wo olle Drawing.Bitmap drinne ist - also im Grunde hat das Interface garnix entkoppelt, und eine einfacherere Architektur hätte gleich und ohne Interface die Drawing.Bitmap übergeben, dann braucht man nicht erst zu prüfen, ob eine drin ist.
Also meiner Ansicht nach sollten die Interfaces alle raus, und die Geschichte einfach und erstmal nur für GDI implementieren.
Aber da fürchte ich, wird kaum was übrig bleiben: ein Fenster, was ausserhalb der Window-Message-Queue läuft, 2 Dauer-Threads, die immer rund laufen - (das hätten vlt. auch Timer geschafft - es gibt glaub auch hoch-präzise Timer?)
Alles annere ist in System.Drawing doch bereits enthalten, also
System.Drawing
und System.Drawing2D
- das ist doch schon eine Rendering-Engine.