![]() |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Delphi-Quellcode:
Abgesehen könnte der Fuhrpark jetzt Pferdekarren unterstützen, die Hafer verbrauchen, ohne den Code ändern zu müssen.
//
einkaufsabteilung.bestelle(fuhrpark.ermittleBedarf()); |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Also vielleicht so:
Delphi-Quellcode:
aAuto : IAuto
aDieselMenge : Integer; var aDieselMenge := 0; for aAuto in aFuhrpark do if aAuto.Kraftstoffart = cDiesel then inc(aDieselMenge, aAuto.Tankgroesse); einkaufsabteilung.bestellen(cDiesel, aDieselMenge); Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Zitat:
Zitat:
Wichtig ist hier natürlich, dass bei jedem Zugriff auf Motor.Kraftstoffart ein Motor zugewiesen ist. Ist das nicht gesichert, muss man den Zugriff natürlich in einer Eigenschaft oder Funktion kapseln. Aber wie der Motor erstellt und und in das Fahrzeug eingebaut wird, ist dabei völlig egal. Einziger Aspekt: Wenn Motor eine Klasseninstanz ist, kennt das Auto alle öffentlichen Eigenschaften und Methoden des Autos (also Schraubenanzahl, Kraftstoffart sowie die Methode Brumm). Handelt es sich um eine Schnittstelle, dann kennt das Auto nur die dort veröffentlichten Eigenschaften (also z.B. nur die Kraftstoffart). Dann könnte man irgendwann auch mal etwas anders als einen Motor einbauen, das eine Kraftstoffart benennen kann (z.B. einen Kanister - macht aber wohl nicht viel Sinn ;-)) |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
BTW, niemand will Dich beeindrucken, schließlich ist das hier keine Verkaufsveranstaltung, nicht wahr ;) |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Das alles geht bei dem Originalcode nicht. Wie ich bereits sagte, wenn man einen DI Container benutzen möchte sollte man das nicht tun, bevor man so einige Prinzipien und dessen Nutzen größtenteils verinnerlicht hat, sonst hat man immer dieses "wofür mach ich mir diese 'Mühe'"-Gefühl. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Darf ich da nochmal nachhaken?
Delphi-Quellcode:
"Bestelle" tut irgend etwas mit den Einträgen einer Liste, die "ErmittleBedarf" bereit stellt (5 Liter Diesel, 2 kg Hafer).
einkaufsabteilung.bestelle(fuhrpark.ermittleBedarf());
So weit richtig? Sofern es ein Ökoauto als Ableitung von Auto gäbe (EDIT: "welches mit Hafer fährt"), könnte ich das mit Objekten genau so regeln. Der Vorteil von Interfaces kommt in´s Spiel, wenn der Hafer-Verbraucher nicht von Auto abgeleitet ist. Dann müsste ich bei der Arbeit mit unterschiedlichen Objekten (verschiedenen Basisklassen) in ErmittleBedarf alle Einträge des Fuhrparks casten, um die gleichen Ergebnisse zu ermitteln. Das ist etwas umständlich und nicht sehr elegant und der Fuhrpark muss alle potentiellen Klassen genau kennen (die entsprechenden Units einbinden). Insofern ist es schon anzustreben, Interfaces zu verwenden - das sehe ich ein. :-D Aber Deine zusätzlichen Hinweise über die flexible Anwendungsmöglichkeit kann ich (noch) nicht nachvollziehen. Mit normalen Objekten ginge das doch auch - wenn auch mit mehr Aufwand. Sehe ich das richtig? Oder was sehe ich falsch? |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
In dem Codeschnipsel ging es um das bestellen von Treibstoff. Was hat das Bestellen von Treibstoff mit der Kenntnis des Fuhrparks und deren Motoren zu tun? Richtig, nix.
Das zuständige Personal bekommt mitgeteilt, was gebraucht wird und kümmert sich um alles weitere. Ob die dann Rabatte aushandeln, Buchhaltung pflegen etc pp braucht nicht mehr zu interessieren. Wichtig ist: genau die Daten, welche gebraucht werden, werden übergeben - in diesem Fall Spritmengen - nicht mehr und nicht weniger. Ich kann nur aus eigener Erfahrung sagen - versteifts euch nicht so auf nen DI Container, oder Interfaces (also die in Delphi), sondern versucht, solche Dinge zu verinnerlichen, die es erst ermöglichen, erweiterte Techniken anzuwenden. Und auch hier muss gesagt werden, es muss nicht überall ein DI Container sein - in vielen Fällen reicht es schon die Prinzipien, die dahinter stecken "manuell" anzuwenden. Stell dir vor, du willst einkaufen. Du schaust in den Kühlschrank und siehst, was dir fehlt und notierst es. Du nimmst den Zettel und gehst in den Supermarkt. Dort kaufst du, was auf dem Zettel steht. Oder baust du deinen Kühlschrank ab, nimmst ihn mit in den Supermarkt und sagst denen: "Schauen sie mal rein, was ich brauche und füllen sie ihn auf"? Das wär eine klassische Verletzung des LoD und wenn man die in die Beispiele aus der Realität umsetzt, merkt man, wie albern der Code eigentlich ist, den man oftmals schreibt - ich schließe mich da nicht aus. In den Beispiel oben könntest du aber auch den Einkaufszettel jemandem aus der Familie geben und den Einkaufen schicken und das Ergebnis wäre am Ende das gleiche: ein wieder gefüllter Kühlschrank. Das wichtige ist also eine klare Definition der Schnittstellen ohne bestimmte Grenzen und Zuständigkeitsbereiche zu überschreiten. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Aber im Ernst: Ich nehme insbesondere den Kühlschrank nicht mit zum Einkauf, weil er immobil ist. Diese Beschränkung gibt es in der IT so nicht. Auch das klassische Beispiel mit der Geldbörse taugt immer weniger in Zeiten von Einzugsermächtigung und Co. Wir brauchen wohl irgendwie eine bessere Herangehensweise, sonst gewinnt immer nur der mit der besseren Rhetorik. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Stefan,
Deine Einwände sind völlig korrekt und ich teile Deine Sicht, ganz klar. Es gibt aus aus meiner Sicht trotzdem einen fundamentalen Unterschied zwischen den noch so einleuchtenden Praxis-Beispielen und den Methoden in der IT: Wer ist der "Herr der Informationen"? Das, was sich in der Praxis von selbst verbietet, kann im Software-Design als besonders elegant angesehen werden: Wenn ich gleich Zugriff auf sämtliche Stammdaten habe, brauche ich nicht erst jedesmal zu fragen. ("Da schreibe ich mir ja die Finger wund.") - Mir erscheint manchmal ohnehin der zusätzliche Schreibaufwand bei der Interface-Deklaration als häufigstes Hindernis für deren Einsatz. Wenn ich allerdings als Entwickler A verantwortlich bin für die Konsistenz meiner Stammdaten, lasse ich den Entwickler B nicht mehr so ohne weiteres in meinem Bereich rumwerkeln. Da mache ich zu und tausche nur das aus, was ich verantworten kann. Diese Konstellation und Sichtweise erschließt sich nicht jedem, insbesonderen dem nicht, der sich als "Herr aller Daten" sieht. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Sehe ich auch so. Eine strikte und klare Trennung macht oft sehr viel Sinn, ist aber manchmal auch unnötig.
Z.B. würde man die Panel.Font-Eigenschaften nicht direkt im Panel veröffentlichen. Wozu auch? Man kann zwar argumentieren, dass das logischer wäre, aber es wäre ein Aufwand, der letzlich keinen wirklichen Nutzen bringt. Außerdem müsste man dann konsequenter Weise auch die Canvas-Propertys usw. direkt im Panel veröffentlichen. Das macht nicht wirklich Sinn. Man muss sich also in jedem Anwendungsfall für die beste Verfahrensweise entscheiden. Dass man dabei die Grundlagenb (LoD usw.) berücksichtigt, ist natürlich sinnvoll. Im Beispiel dest Kaftstoffs würde ich in der Realität im Handbuch des Fahrzeugs nachsehen, was ich tanken muss oder andere fragen oder in einer Tabelle nachlesen. Das lässt sich in der Software so nicht sinnvoll nachbilden. Jedenfalls nicht, um lediglich die Tankstofffrage zu klären. Also entgegen der Realität ist es in dem Fall am einfachsten, den Motor zu fragen, was er denn tanken will. Wie man das im Detail realisiert (ob man direkt Auto.Motor.Kraftstoff anspricht oder die Abfrage in einer Funktion Auto.GetKraftstoff kapselt) und ob man dabei mit Objekten oder Interfaces arbeitet, ist dabei m.E. nebensächlich. Insofern ist das ein anderes Thema, das zwar durchaus wichtig ist, aber nicht in aller Konsequenz durchgedrückt werden sollte. Für mich ist die Frage interessanter, wie die Objekte (deren Schnittstellen weiter verwendet werden) ertzeugt und verwaltet werden. Wer ist Owner der Objekte? Gibt es Verschachtelungen? Wer kümmert sich um die Lebensdauer der Objekte? Im Moment schlage ich mich mit eingen Seiteneffekten herum, die sich gelegentlich bei meinen Objekt-Verwaltungen und den komplexen Beziehungen ergeben. Dabei verspreche ich mir Verbesserungen bei der künftigen Verwendung von Schnittstellen und einer zentralen Objekterzeugung. Im Moment muss ich aber erst nochmal die Kühe einfangen. ;-) Wenn man auf die Owner-Verkettung verzichtet, muss man die Beziehungen der Objekte natürlich anders abbilden. Aktuell kann ich für tausend Objekte einfach das OwnerTournament interativ ermitteln. Ohne diese verschachtelung müsste ich für die tausend Objekte eine neue Eigenschaft einführen, die auf das Tournament-Objekt verweist. Führe ich das als Pointer aus, mag das noch gehen. Speichere ich aber die (ggf. lange) Id, geht das auf den Speicherverbrauch. Das sind die "Probleme", die mir aktuell noch Kopfzerbrechen bereiten... |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Wo wir so schön dabei sind:
Zitat:
Und wie sie der Anweisung Diesel zu bestellen nachzukommen hat, sollte sie durchaus wissen. Der Herr des Fuhrparkes muss aber detaillierte Informationen über die Objkete in seiner Verwaltungsdomäne haben. Er hat festzustellen wieviel Hafer, Kerosin und Plutonium (für den Flux Kompensator vom DeLoran des Chefs) die Einkaufsabteilung zu beschaffen hat. Bei der ganzen Sache ging es doch ursprünglich um Verletzungen von LoD. Die liegt um Ursprungspost vor, aber ich kann nichts schlimmes daran entdecken. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Zitat:
Beispiel (stark vereinfacht): methode fuhrpark.fahrzeug(ckennz:string):tfahrzeug; CleanupInterneListe(cKennz); result := HolefahrzeugAusInternerListe(ckennz); if result = NIL then result := erzeugeFahrzeug(ckennz); InterneListe.add(result); end; und wo ein Fahrzeug benötigt wird: Einsatzfahrzeuge.add(fuhrpark.fahrzeug('K-BW-5050')) // implementiert ungefähr so: methode EinsatzFahreuge.add(kfz:tfahrzeug) ffahrzeuge.add(kfz); kfz.adduser(self); end destructor Einsatzfahrzeuge.destroy; RemoveMefromProperties; ffahrzeuge.free; inherited; end |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
@neo4a (mit etwas Verspätung wegen zeitw. Netzausfall)
Sie sieht eben doch in jedem Fall in dem Tank nach. Allerdings eben über eine gewissermaßen annonyme Funktion. Sie weiß nicht, dass sie im Tank nachsieht, macht es aber eben doch. Wenn TObject bereits eine Property "Kraftstoff" hätte, deren Getter nach belieben überschrieben werden könnte, würde Eure Argumentation eigentlich schon überflüssig werden. Dann hätte man über eine Schnittstelle nicht viel gewonnen. Wenn völlig verschiedene Klassen "Kraftstoff" einführen macht die Verwendung einer Schnittstelle schon Sinn, damit man die Objekte bei der Kraftstoffberechnung nicht extra casten muss. Irgendwie wirkt das Ganze aber teilw. wie eine Metadiskussion auf mich. Die zwei genannten Funktionen könnte man auch auf klassischem Wege realisieren. Die Kraftstoffermittlung (die könnte auch in eine gesonderte Unit ausgelagert werden) müsste die in Frage kommenden Klassen natürlich kennen, aber der Aufruf
Delphi-Quellcode:
könnte eigentlich genau so aussehen.
einkaufsabteilung.bestelle(fuhrpark.ermittleBedarf());
Ich hätte gern detailliertere Aussagen. Vielleicht wird man sich ja dann doch noch einig. :-) @exilant So etwa arbeite ich auch. Aber die Beziehungen sind sehr komplex geworden. Daher verspreche ich mir durch eine zentrale Objekteverwaltung und Arbeit mit Schnittstellen eine bessere Übersicht. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Code:
Sie hat Kenntnis von Fuhrpark, Fahrzeug und Motor (durch den Zugriff auf die Properties) und greift somit 3 Ebenen tief in die Struktur. Desweiteren ist sie auf eine Kraftstoffart festgeschrieben. Für Benzin, Hafer, Plutonuium müsste eine ähnliche Zeile her -> Copy and Paste?
if fuhrpark.eingeteiltesfahrzeug.motor.kraftoffart = diesel then einkaufsabteilung.dieselbestellen;
Jedwede Änderung an allen zuvor genannten Beteiligten könnte zur Folge haben, dass dieser Code nicht mehr korrekt funktioniert. Annahmen über die Struktur indirekter Abhängigkeiten erzeugt eine direkte Abhängigkeit. Den Kraftstoffbedarf zu ermitteln wäre somit ein internes Implementierungsdetail von Fuhrpark. Ob der Fuhrparkleiter dann in den Fahrzeugscheinen nachschaut, nen Schlauch in die Tanks steckt oder dem Azubi sagt, er soll mal rumlaufen und auf die Tanknadel schauen, ist total Rille für denjenigen, der gerne den Kraftstoffbedarf mitgeteilt haben möchte. Stichwort: ![]() |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Besser und egal wie IFuhrpark intern aufgebaut und organisiert ist: IEinkauf fragt IFuhrpark.Leiter nach dem Bedarf an IKraftstoff. Ansonsten zieht jede (interne) Änderung in TFuhrpark möglicherweise eine Änderung der Prozedur TEinkauf.Bestellermittlung() nach sich: Wartungsaufwand und Fehleranfälligkeit steigt tendenziell. (Zwischenteitlich hat Stefan vor mir mit ähnlichem Inhalt gepostet.) |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
<ironie>
Delphi-Quellcode:
IPhone.Message(IMergency.Call(I.Self + ' habe versehentlich ' + ITank.Inhalt + ' in meinem ' + ITank.Name + ', weil ' + IDiot.Name + ' den ' + IMotor.Name + ' meiner ' + ISetta.Name + ' mit dem ' + ITank.Name + ' des ' + IVecoLKW.Name + ' verlinkt hat!'));
</ironie> |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Delphi-Quellcode:
Denke ich zu einfach?
case fuhrpark.eingeteiltesfahrzeug.motor.kraftoffart of
diesel : einkaufsabteilung.dieselbestellen; hafer : einkaufsabteilung.haferbestellen; plutonium : sicherheitsdienst.anrufen; end; |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Dann musst Du jedes case Konstrukt ändern. Mit Interfaces hast Du dieses Problem nicht, Du übergibst einfach eine neue Klasse TUBoot (implementiert IFahrzeug), das war's... |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Aus meiner Sicht sind meine Argumente auf dem Tisch und es lohnt sich für mich nicht, in die nächste Wiederholschleife zu gehen. Nimm Dir die Zeit und schau Dir die von Stefan bereits erwähnte CleanCodeDeveloper-Seite an. Damit bekommst Du einen schönen Blick darauf, wie und nach welchen Regeln die "großen Jungs" spielen. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Mein aktueller Meinungsstand:
Künftige Verwendung von Interfaces: UNBEDINGT! Ebenso das Verbergen der Klassen-Units untereinander (im Regelfall). Im Projekt sollen dann grundsätzlich nur die Schnittstellen bekannt sein. Auf eine Verschachtelung von Objekten über deren Owner werde ich verzichten. Beziehungen untereinander werden über eine Property abgebildet, die die ID des referenzierten Objektes enthält. Auf Spring werde ich (vorerst) verzichten und mir selbst eine "Factory" (oder wie müsste man das nennen?) bauen, die auf Anfrage Objekte erzeugt und deren Schnittstellen zurück liefert. Wird keine ID bei der Anforderung angegeben, wird eine neue erzeugt. Die ID besteht aus zwei Zeitstempeln und einem Zufallswert (Programmstartzeit und Now und Random) und dürfte damit weltweit nicht doppelt vorkommen und eindeutig nach der Erstellungsreihenfolge sortierbar sein (im Gegensatz zu einer GUID). ID + Interface werden in einem Dictionary gespeichert (dadurch erhöht sich m.E. der RefCount). Wird ein Interface eine gewisse Zeit nicht mehr abgerufen und der RefCount ist 1 wird es aus dem Dictionary entfernt (und das Objekt somit aufgelöst). Ich könnte also sagen: IMyPerson := Factory.GetPerson(PersonId, InClubId); Die Factory kümmert sich dann darum, die Objekte herauszusuchen bzw. ggf. zu erzeugen und ggf. die Verbindung zu anderen Objekten einzurichten und die Schnittstellen heraus zu geben. Ich denke, das würde ich lieber selbst an zentraler Stelle regeln, anstatt Spring einzusetzen, von dem ich wenig verstehe. Diesen Weg würde ich mir wünschen - wenn es so realisierbar ist. Ich könnte mir vorstellen, dass man damit sehr übersichtlich abeiten kann. Weitere Überlegungen: (Ich bleibe mal hier im Thread, da das thematisch schon noch zusammen gehört.) Die Daten jedes Objektes würden in einer einfachen DB gespeichert. Je Klasse eine Tabelle, je (mit Attribut gekennzeichneten) Property ein entsprechendes Feld. Die Tabellen können jederzeit anhand der Klassendefinition passend erzeugt werden. Im Grunde wäre das ja schon ein kleiner ORM. Oder sollte man dann doch lieber gleich zu mORMot oder DORM greifen und nicht alles neu erfinden? Aber die arbeiten wieder nicht mit Interfaces? Fragen über Fragen... Letztlich geht es dann natürlich auch noch um die Datenbindung an die GUI. Bei meinem odControls habe ich alles fest verdrahtet. Jeder Tastendruck z.B. in einem odEdit hat sofort den Inhalt eines Propertys verändert. Es gibt also keine Transaktionen oder Prüfungen, die die Übergabe von Änderungen aus der GUI in die Datenebene kontrollieren. Diesbezüglich muss ich mich dann doch mal genauer mit DSharp und LiveBinding auseinandersetzen. Ich weiß, dass ich ohne ein Databinding nicht mehr arbeiten will. Wie genau, ist aber noch nicht entschieden. Nachtrag: Die GUI-Controls müssten eigentlich eine ID und PropertyName zugewiesen bekommen und sich darauf hin aus der Factory das entsprechende Objekt abrufen und sich an dieses binden. An der Stelle wird man mit Interfaces sicher nicht weiter kommmen - oder? Oder kann die RTTI mit Interfaces genau wie mit Objekten umgehen? Und wann sollen die GUI-Controls der Factory bescheid geben, dass die bereit gestellten Objekte/Interfaces wieder freigegeben werden können? Oh Mann - sooo viele Fragen. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
@stahli
...um die Verwirrung zu erhöhen schau dir auch mal das ORM (TMS Aurelius) von TMS Software an. Ist zwar nicht kostenfrei (wenn man zumindest kommerziell entwickelt) aber hat durch den DataModeller und der Möglichkeit seine Klassen aus der vorhandenen Datenbank zu generieren auch seinen Reiz. Datenbanken werden schon einige unterstützt und es werden mehr. Auch die restlichen Features sehen ganz nett aus. Ich spiele gerade ein wenig damit rum und bisher gefällt mir was ich sehe. cu cg |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Das mit den Armbändchen ist doch Satire, oder? |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Aber danke für die Info. Das sieht auf den ersten Blick sehr umfangreich aus. Werde ich mir mal die Tage anschauen... (Der Kauf wäre notfalls machbar.) |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
@stahli
Das täuscht. :-D Man kommt recht schnell zu Ergebnissen. Ich hatte mir ein kleines ORM auf Basis der neuen RTTI schon selbst gebastelt. Funktionierte auch recht gut (Spalten mit Attributen benennen, SQL aus diesen dann generieren usw.) und war als Training für RTTI super. Brunos Jungs habe hier aber schon einiges mehr aufgebaut (Linq-like-Syntax Querys usw.). Super ist auch die Unterstützung der verschiedenen DB's. Da bekommt man Lust auf mehr. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Ich meinte mit "umfangreich" nicht unbedingt "besonders kompliziert" sondern eher "viele Möglichkeiten". Auch gerade wegen der Linq-Syntax.
Vorhin habe ich nochmal schnell die Dokumentationen zum Aurelius und DataModeller durchgeblättert. Das scheint schon sehr leistungsfähig zu sein, ist aber zwangsläufig auch recht DB-lastig. Ich meine, man muss sich auch mit den DB detailliert auseinandersetzen. Nach meinen Überlegungen hätte ich aus den Klassen einfach vorläufige Tabellen generiert, in denen die Daten abgelegt werden (also keine direkten relationen Beziehungen, Trigger usw). Man müsste sich also letztlich nur um die Klassen und Interfaces kümmern und die DB würde als reines (dummes) Datenlager dienen. Natürlich ist so ein ausgewachsenes ORM deutlich leistungsfähiger. Allerdings arbeitet man dann ja auch wieder mit Objekten. Würde das Aureliius-Framework klaglos ermöglichen, da Schnittstellen zu implementieren? Auch möchte ich gern mit generischen Listen arbeiten. Harmoniert das dann? Und letztlich ist mir wichtig, dass sich die GUI-Controls selbständig dynamisch die Objekte/Interfaces abrufen können, deren Daten sie binden sollen. Etwa so:
Delphi-Quellcode:
In der Form nutze ich das bei meinen odControls und möchte das gern beibehalten.
EditFirstName.Interface := IMyPerson;
EditFirstName.PropName := 'FirstName'; //oder auch EditFirstName.Interface := IMyPlayer; EditFirstName.PropName := 'Person.FirstName'; // wobei intern auf das Personenobjekt aufgelöst wird Allerdings werden derzeit alle genutzen Datenobjekte dauerhaft im Speicher gehalten, was ich künftig nicht mehr will. Vermeiden möchte ich, beim Öffnen eines Formulars dutzende Objekte/Interfaces zu erzeugen und die dann an die Formularcontrols zu binden. Statt dessen weise ich lieber (wie auch jetzt schon) nur das oberste Objekt zu und das Framework kümmert sich darum, alle weiteren Subobjekte/Interfaces zu laden und an die Formularcontrols zu binden. Ich werde wohl in nächster Zeit mal einige Varianten testen müssen, bin aber an allen Diskussionen zu diesem Bereich weiterhin brennend interessiert. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
P.S.: Ob du dir Armbändchen anziehst oder nicht, oder, wenn du Judo oder Karate machst, nen Gürtel umbindest, steht dir frei. Und auch, ob du dazulernen willst, oder nicht. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Hintergrund der ganzen Sache ist eigentlich das Buch "Clean Code" von Robert "Uncle Bob" Martin. Natürlich kann man nicht alles davon auf die Goldwaage legen, aber es zeigt an vielen Beispielen wieso man Code besser nicht auf eine bestimmte, unschöne/unsaubere Art schreibt. Ich glaube die schlechten Beispiele in dem Buch sind hervorragende Dinge um einen Entwickler der ein bisschen auf Wartbarkeit wert legt aufzuschrecken und zu sensibilisieren. |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
Sobald man die nunmehr nur noch kleine (heile?) Welt von Delphi verlässt und sich mit anderen Sprachen und Plattformen beschäftigt/beschäftigen muss, kommt man mit einer Reihe von Methoden und Konzepten in Berührung, die quasi Industriestandard sind. Libs wie Delphi-Spring und Stefans D# erlauben es, sich in sie in vertrauter Delphi-Umgebung einzuarbeiten und seine bisherige Herangehensweise kritisch zu hinterfragen allein durch die Frage: Wie machen's denn die anderen? Und wenn sich Leute wie Googles verantwortlicher Test-Manager ![]() |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
![]() |
AW: Spring-DI / DelegatedConstructor / Factory für Dummies
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 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