2011-05-01 2 views

답변

1

RequestResponse 개체에 대해 이야기하는 경우 며칠 전에 Symfony 개발자 메일 링리스트에서 이에 대한 토론이있었습니다. 나는 당신이 그것을 here을 보도록 초대합니다.

왜 게터가 아닌가요? 확실한 답변이 있는지 확실하지 않지만 개인 취향에 기반한 결정이라고 생각합니다.

캡슐화가 중단 되었습니까? 이 특별한 경우에 대한 제 생각으로는 아닙니다. 내 추론은 지금 당장 공공 장소에있는 다양한 물건에 대해 특별한 논리가 수행되지 않는다는 것입니다. 그래서 결국에는 getter를 통해 객체를 가져 와서 직접 읽거나 수정하게 될 것입니다. public 속성을 사용하여 객체를 검색하는 것과 별 차이가 없습니다.

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

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

속성에 특정 값이나 형식이 있어야하는지 캡슐화해야합니다. 예를 들어, cost 속성이있는 클래스가 있고이 속성이 음수가 아니어야한다고 가정 해보십시오. 따라서 cost 속성이 public 인 경우 $receipt->cost = -1;과 같은 식으로 값을 음수 값으로 설정할 수 있습니다. 그러나 클래스를 비공개로 설정하고 클래스 사용자가 setter를 통해서만 설정할 수 있다면 setter 코드에서 몇 가지 특별한 유효성 검사를 수행하여 비용이 결코 0 이하가되지 않도록 할 수 있습니다.

우리의 경우, 우리는 정확한 컬렉션 객체 인 ParameterBag 객체에 대해 이야기하고 있습니다. 나는이 물건에 특별한 요구 사항이 있다고 생각하지 않지만 잘못 될 수 있습니다. 그래서 제게는 공공 재산을 통해 그 재산에 접근하는 것이 옳습니다.

게터를 선호하는 주요 인자는 게터가 사용되는 프레임 워크의 다른 부분과 더 일관성이 있다는 것입니다. 그러나 getters는 공용 속성과 공존 할 수 있습니다.

결론적으로이 특별한 경우에는 안전하다고 생각합니다. 공공 재산은 유익한 것으로 보이는 특별한 경우에만, 그리고 그렇게하는 것이 옳은 경우에만 사용해야합니다.

+0

symfony-devs의 주제로 링크 해 주셔서 감사합니다. 나는 보통이 그룹을 읽었지만이 주제를 눈치 채지 못했다. – Koc

+0

그래, 네가이 symfony-devs 포럼에 적극적으로 참여했기 때문에 내가이 링크를 제안했음을 눈치 챘다. 네가 속성을 null로 설정할 수 있다는 사실에 맞다. 아마 좋은 생각 일 것이다. 속성에 대한 setter 및 getter 만 제공하여 캡슐화를 적용합니다. – Matt

0

Request 개체를 의미합니까? 또는 어떤 속성을 생각하고 있습니까?

Security 구성 요소를 살펴보고 테스트 중심 개발을 사용하고 테스트 된 라이브러리를 사용하고 (자체 인증, 암호화 및 관련 솔루션을 고안하지 마십시오) 코드 검토를 수행하십시오.

0

이미 캡슐화 된 것을 캡슐화하는 요점은 무엇입니까? 내 말은 - 각 속성은 캡슐화 된 parameterBag 인스턴스입니다.

관련 문제