Redusere kopling i enheter

stemmer
7

Jeg leter etter en passende måte å redusere kopling i en meldings bunt Jeg skriver for Symfony2 rammeverk, slik at jeg enkelt kan bruke den mellom programmer.

Hver forekomst av Message selskap skal ha en sender og en mottaker, instanceof Symfony\Component\Security\Core\User\UserInterfacesom jeg kan kreve helt fint i settere for eiendommene. Men i å sette opp ORM relasjoner, ser det ut til at jeg må spesielt satt en targetEntity ( Foo\BarBundle\Entity\Userfor eksempel), noe som betyr at all videre bruk av Message enhet i ulike applikasjoner vil enten kreve en kode endre eller skohorn dem til å bruke en brukerenhet, som ikke synes for meg å være i en meldings bunt omfang til å kreve.

Eventuelle forslag / beste praksis om hvordan jeg kan redusere kopling i dette tilfellet?

EDIT: Jeg prøvde å sette en global parameter med en utvidelse og bruke det i merknadene, noe som @ORM\ManyToOne(targetEntity=%my.entity%), men det ser ut til at merknaden parseren ikke konverterer parametre, fordi strengen ble tolket som en bokstavelig, som mislyktes, selvfølgelig.

Publisert på 23/05/2011 klokken 23:05
kilden bruker
På andre språk...                            


2 svar

stemmer
4

Løsningen jeg endelig avgjort på var å skape en MessengerIdentity, lagret i databasen, som tar et objekt og lagrer sin klasse navn og identifikator. Så jeg brukte en LifecycleEvent å laste inn en referanse til foretaket lagret i MessengerIdentity, slik at noe sånt $messenger->getSender()->getUsernameer fortsatt mulig.

Du kan se min implementering på GitHub (særlig de enheter og Lære arrangementet lytteren ) ... du kan også se diskusjonen fra doctrine2 brukergruppe her .

EDIT: Etter nærmere overveielse, bestemte jeg meg for at jeg ikke liker gjennomføringen jeg snakker om ovenfor (for en ting, jeg ble egentlig kopiere lime koden inn i andre prosjekter, som føltes veldig rotete og i strid med tørr), og så jeg refactored min kode, slik at meldingen enhet er en abstrakt kartlagt super, med abstrakte metoder som forretningslogikk trenger, refererer avsender og mottaker.

Det er nå opp til slutten utvikleren å lage den endelige gjennomføringen av Message enhet, og base klassen ikke engang røre implementeringer for avsender og mottaker, som oppnådde min ønsket resultat av å redusere avhengigheten av bunt på en bestemt bruker klasse.

Svarte 03/06/2011 kl. 16:39
kilden bruker

stemmer
1

Du kan lage en modell objekt med all forretningslogikk og deretter opprette en enhet som utvider modellen, men legger din enhet systemkoden og lære merknader til det. Dette er hvordan FOSUserBundle fungerer.

Svarte 05/12/2011 kl. 16:26
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more