Hvorfor egenskaper forespørsel / spørring / attributter / ... er offentlige i Symfony2?

stemmer
0

Hvorfor ikke getters? Og hvordan det kombinert med innkapsling principe? Gjør det trygt?

Oppd: Ja, jeg er om Request. Sikkerhet: Jeg mener at noen i kode (ved hjelp av lytteren) kan gjøre$request->attributes = null;

Publisert på 01/05/2011 klokken 12:54
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Hvis du snakker om Be og Response gjenstander, det var en diskusjon om dette på Symfony utviklere mailingliste for noen dager siden. Jeg inviterer deg til å ta en titt på den her .

Hvorfor ikke getters? Ikke sikker på om det er et endelig svar på dette, men jeg tror det er en beslutning basert på personlige smak hovedsak.

Betyr det bryte innkapsling? Ikke egentlig etter min mening for denne spesielle saken. Mitt resonnement er at for nå, er ingen spesiell logikk utført på de ulike objektene som er offentlige akkurat nå. Så til slutt, vil du ende opp med å hente objektet via en getter og lese eller endre det direkte. Det er ikke mye forskjell å hente objektet med en offentlig eiendom.

// With Getters
$parameterBag = $request->getQuery();
$parameterBag->get('key');

// With Public Properties
$parameterBag = $request->query;
$parameterBag->get('key');

Innkapsling skal håndheves når du trenger å være sikker på at en eiendom har en spesiell verdi eller format. For eksempel si at du har en klasse med en kostnad eiendom og denne egenskapen bør aldri være negativ. Så hvis kostnadene eiendommen var offentlig, kan det være mulig å sette den til en negativ verdi ved å gjøre noe sånt $receipt->cost = -1;. Men hvis du gjør det privat og brukeren av klassen er bare i stand til å sette den via en setter, så du kan sørge for at kostnadene er aldri under 0 ved å gjøre noen spesielle validering i fuglehunden kode.

I vårt tilfelle er det snakk om en samling objekt, til en ParameterBag objekt være presis. Jeg tror ikke det er spesielle krav til dette objektet, men jeg kan ta feil. Så for meg, er det riktig å ha tilgang til disse egenskapene via offentlige eiendommer.

Hovedargumentet jeg kunne se i favør av getters er at det ville være mer i samsvar med de andre delene av rammeverket hvor getters brukes. Men getters kunne sameksistere med offentlige eiendommer.

For å konkludere, tror jeg det er trygt for denne spesielle saken. Offentlige eiendommer bør bare brukes i spesielle tilfeller hvor det synes å være gunstig, og hvor det er riktig å gjøre det.

Svarte 03/05/2011 kl. 00:07
kilden bruker

stemmer
0

Hva er poenget med å kapsle det som allerede er blitt innkapslet? Jeg mener - hver av disse egenskaper er en parameterBag eksempel med sin innkapsling.

Svarte 13/03/2013 kl. 09:53
kilden bruker

stemmer
0

Mener du det Request objekt? Eller hvilke egenskaper er du tenker på?

Hvis du er bekymret for sikkerheten, så ta en titt på sikkerhetskomponent, bruke Test-Driven Development, bruk testet bibliotek (ikke oppfinne din egen autentisering, kryptering og relaterte løsninger) og gjør kode anmeldelser.

Svarte 02/05/2011 kl. 23:01
kilden bruker

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