View Issue Details

IDProjectCategoryView StatusLast Update
0000200Adventure PHP FrameworkNeues Feature // New Featurepublic2016-01-19 20:30
ReporterdingsdaAssigned ToChristianAchatz 
PrioritynormalSeverityfeatureReproducibilityN/A
Status resolvedResolutionfixed 
Product Version2.0 
Target Version3.1Fixed in Version3.1 
Summary0000200: DIServiceManager erweitern damit man bei der Konfiguration mehr als einen Parameter für Methoden angeben kann
DescriptionAktuell kann man bei der Konfiguration der serviceobjects.ini nur einen parameter pro Methode angeben. Um mehr als einen parameter zu übergeben muss man extra ein zwischenobject erstellen, welches dann in das eigentlich gewünschte Objekt injiziert wird,
so wie es z.b beim GORM gemacht wird

[GORM]
servicetype = "SINGLETON"
class = "APF\modules\genericormapper\data\GenericORRelationMapper"
setupmethod = "setup"

conf.db.method = "setConnectionName"
conf.db.value = "MyDB"

init.umgtrel.method = "addDIRelationConfiguration"
init.umgtrel.namespace = "mytestapp\gorm"
init.umgtrel.name = "umgtrel"

init.umgtmap.method = "addDIMappingConfiguration"
init.umgtmap.namespace = "mytestapp\gorm"
init.umgtmap.name = "umgtmap"

[umgtrel]
servicetype = "SINGLETON"
class = "APF\modules\genericormapper\data\GenericORMapperDIRelationConfiguration"
conf.namespace.method = "setConfigNamespace"
conf.namespace.value = "mytestapp\gorm"
conf.affix.method = "setConfigAffix"
conf.affix.value = "umgt"

[umgtmap]
servicetype = "SINGLETON"
class = "APF\modules\genericormapper\data\GenericORMapperDIMappingConfiguration"
conf.namespace.method = "setConfigNamespace"
conf.namespace.value = "mytestapp\gorm"
conf.affix.method = "setConfigAffix"
conf.affix.value = "umgt"

die objecte GenericORMapperDIMappingConfiguration und GenericORMapperDIRelationConfiguration werden eigentlich nur erstellt um sie über die Methoden addDIMappingConfiguration bzw. addDIRelationConfiguration in das GORM-object injizieren zu können wodurch eigentlich nur die Methoden addMappingConfiguration und addRelationConfiguration aufgerufen werden.

das hat mehrere Nachteile:

- soll ein Object über den DIServiceManager erstellt werden können, muss es für methoden, die mehr als zwei parameter haben ersatzmethoden anbieten über die man konfigurierte objekte übergibt.
- doppelt so viel schreibarbeit in der config als nötig wär
- performanceverlust

mit ein paar kleinen änderungen, kann er DIServiceManager auch mehr als einen parameter für methoden in der conf.* section verarbeiten

https://github.com/dingsda87/code/blob/ea44b511f982bf99c2a449b966fc6b1925355abf/core/service/DIServiceManager.php
(zeilen 201-243 sind verändert)

für die obige konfiguration reichen nun auch folgende zeilen

[GORM]
servicetype = "SINGLETON"
class = "APF\modules\genericormapper\data\GenericORRelationMapper"
setupmethod = "setup"

conf.db.method = "setConnectionName"
conf.db.value = "MyDB"

conf.umgtrel.method = "addRelationConfiguration"
conf.umgtrel.value.1 = "mytestapp\gorm"
conf.umgtrel.value.2 = "umgt"

conf.umgtmap.method = "addMappingConfiguration"
conf.umgtmap.value.1 = "mytestapp\gorm"
conf.umgtmap.value.2 = "umgt"

man sieht sofort dass die konfiguration nun kürzer und übersichtlicher geworden ist.

hinter value. muss nicht unbedingt 1 und 2 stehen. man kann es z.b. auch so schreiben:

conf.umgtrel.method = "addRelationConfiguration"
conf.umgtrel.value.namespace = "mytestapp\gorm"
conf.umgtrel.value.nameaffix = "umgt"

die reihenfolge der values muss natürlich mit den parametern der methode übereinstimmen.

der performance gewinn war bei meinen tests ca 30-50% je nach menge der Methoden.

die änderung ist abwärtskompatible.
Tagsconfiguration, di-container, service
Codereferenz: ([Datei]:[Zeile])core/service/DIServiceManager.php
Namespacecore

Activities

ChristianAchatz

2014-06-08 12:01

administrator   ~0000375

Hallo Amily,

gefällt mir! :) Lass uns das - sofern du einverstanden bist - in 2.2 einbauen, dort ist auch noch 0000199 und 0000059 offen. Diese passen IMHO gut in ein Paket.

Einverstanden?

dingsda

2014-06-08 12:03

developer   ~0000376

von mir aus ist 2.2 auch ok.
2.1 könnte auch knapp werden, weil die doku ja noch angepasst werden müsste

ChristianAchatz

2014-06-08 12:11

administrator   ~0000377

Auf 2.2 verschoben um Zeit für Anpassung der Doku zu haben.

ChristianAchatz

2015-09-05 17:13

administrator   ~0000603

@dingsda: magst du dir das Thema nochmal ansehen?

Moved to 3.2 to shape scope for 3.1.

ChristianAchatz

2016-01-16 16:39

administrator   ~0000659

Last edited: 2016-01-18 09:28

View 3 revisions

Implementation done for 3.1. Changes see https://github.com/AdventurePHP/code/commit/d7ccd540799372dfbf9ccac46b4ca6c6927bdc18.

Documentation in progress.

ChristianAchatz

2016-01-19 20:30

administrator   ~0000660

Documentation done. Closing issue.

Issue History

Date Modified Username Field Change
2014-05-31 00:04 dingsda New Issue
2014-05-31 00:12 dingsda Description Updated View Revisions
2014-05-31 00:13 dingsda Assigned To => dingsda
2014-05-31 00:13 dingsda Status new => assigned
2014-06-01 17:25 jwlighting Codereferenz: ([Datei]:[Zeile]) => core/service/DIServiceManager.php
2014-06-01 17:25 jwlighting Target Version => 2.1
2014-06-01 17:40 jwlighting Tag Attached: configuration
2014-06-01 17:40 jwlighting Tag Attached: di-container
2014-06-01 17:40 jwlighting Tag Attached: service
2014-06-08 12:01 ChristianAchatz Note Added: 0000375
2014-06-08 12:03 dingsda Note Added: 0000376
2014-06-08 12:11 ChristianAchatz Note Added: 0000377
2014-06-08 12:11 ChristianAchatz Target Version 2.1 => 3.0
2015-03-16 22:15 ChristianAchatz Target Version 3.0 => 3.1
2015-09-05 17:13 ChristianAchatz Note Added: 0000603
2016-01-16 16:39 ChristianAchatz Note Added: 0000659
2016-01-16 16:39 ChristianAchatz Assigned To dingsda => ChristianAchatz
2016-01-18 09:28 ChristianAchatz Note Edited: 0000659 View Revisions
2016-01-18 09:28 ChristianAchatz Note Edited: 0000659 View Revisions
2016-01-19 20:30 ChristianAchatz Note Added: 0000660
2016-01-19 20:30 ChristianAchatz Status assigned => resolved
2016-01-19 20:30 ChristianAchatz Fixed in Version => 3.1
2016-01-19 20:30 ChristianAchatz Resolution open => fixed