![]() |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Zitat:
Der Einfache TFoo.Create; macht doch keine Probleme... Mavarik |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Zitat:
|
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Zitat:
Mavarik |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Noch'n Tip: Lagere das Register in eine extra Unit aus und mach das nicht im initialization Part der Unit mit der Klasse.
Dadurch erreichst du nämlich keineswegs eine Entkopplung sondern nur 1. Untestbarkeit deiner Klasse (dadurch, dass sie im Implementation Teil deiner Unit versteckt ist) und 2. indirekte Kopplung deiner Klasse auf den Container (dadurch, dass die Container Unit im Uses deiner Klassen Unit steht). |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Zitat:
Mavarik |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Stevie hat aber Recht mit der Entkopplung. Das hatten wir gestern schon mal. Genau wie Supports ;)
|
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Zitat:
Delphi-Quellcode:
Den Spaß werden wir hier implementieren:
unit MyInterfaces;
interface const SID_Sample : string = '{13B2116B-B78B-4E89-8070-83F9E36720EF}'; SID_OtherSample : string = '{74EF1A68-1EED-4DA4-9845-5F77AEB6D2DA}'; type ISample = interface(IUnknown) [SID_Sample] procedure Foo; function Bar : Boolean; end; IOtherSample = interface(IUnknown) [SID_OtherSample] procedure FooFoo; function BarHocker : Boolean; end; implementation end.
Delphi-Quellcode:
Die Unit Container ist ja jedem hier bekannt; so melden wir alle schön an:
unit MyClasses;
interface uses MyInterfaces; type TMySampleClass = class(TInterfacedObject, ISample) private function Bar: Boolean; procedure Foo; end; TMyOtherSampleClass = class(TMySampleClass, IOtherSample) private function BarHocker: Boolean; procedure FooFoo; end; implementation {blablabla - Methoden über Methoden} end.
Delphi-Quellcode:
Tataaaa! :party:
unit RegisterMyClasses;
interface implementation uses Container, MyInterfaces, MyClasses; initialization Container.GlobalContainer.RegisterClass<ISample, TMySampleClass>; Container.GlobalContainer.RegisterClass<IOtherSample, TMyOtherSampleClass>; end. |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Wie war noch das Design-Pattern!
Niemals Klassendefinitionen im Interface Teil. Sonst Referenziert man noch dagegen? Mavarik |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
@Mavarik
Den Zahn hab ich Nick Hodges schon lange gezogen, der das ne Weile gepredigt hat - aus genau den oben genannten Gründen. Das Verstecken von Klassen im Implementation Teil, damit sie ja keiner so nutzt, ist Unfug, wenn man sie dann über ein Interface von hintenrum verfügbar macht. Denn das ist der Tod für jegliche Testbarkeit der Klasse und dann fangen einige an, mit Compiler switches und weiß der Teufel das ganze für Unittests sichtbar zu machen. Außerdem ist das garantiert kein Design Pattern sondern eine Delphi Eigenheit. Außerdem sollte man seinen Code so schreiben, dass er auch ohne einen DI Container durch manuelles Zusammenstecken funktionieren würde. Und das ist hier auch nicht der Fall. @TiGü :thumb: |
AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!
Ich habe den Thread noch nicht gelesen und mir für's Wochenende aufgehoben.
Weniger zu Spring (für deine unermüdliche Arbeit an Spring4D stelle ich in meinem Garten irgendwann mal eine Statur mit Lorbeerkranz von dir auf), sondern zu Klassen-Sichtbarkeit: Klassendefinitionen als Ersatz für "protected/package/... class" in den implementation-Teil zu schieben handhabe ich teilweise auch noch so. Habt Ihr die Diskussion öffentlich geführt? Rein interessenshalber. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz