2013-07-22 1 views
1

Symfony 의 BaseContent 클래스에 몇 가지 개인화 된 메서드를 추가했지만 다른 개발자가 Symfony 응용 프로그램에서 작업하고 있으며 일종의 CRUD 생성기에서 생성 된 코드가있을 수 있습니다. Symfony에 정말 익숙해 져서 무엇이 사용되고 있는지 확실하지 않습니다.) 문제는 다른 개발자가 PHP 클래스를 다시 생성 할 때 맞춤식 코드가 덮어 쓰기된다는 것입니다.Symfony에서 덮어 쓰는 클래스 메서드 방지

동일한 BaseContent 클래스 파일에 맞춤형 메소드를 유지하기 위해 수행 할 수있는 작업이 있습니까?

+0

무시할 수있는 것과 대체 할 수없는 것에 대해 합의점을 갖기 위해 동료와 이야기하십시오. – deceze

+0

http://www.php.net/manual/en/language.oop5.final.php –

+0

아마도 svn과 같은 일부 버전 소프트웨어를 구현해야합니다. –

답변

2

symfony의 propel : build-model 또는 doctrine : build-model (사용하는 ORM에 따라 다름) 및 Base의 상위 디렉토리에있는 BaseContent 매개 변수와 메소드를 Content 클래스에 추가하거나 무시합니다 수업. 이렇게하면 스키마를 변경할 때 개인별 맞춤법을 다시 작성할 필요가 없습니다.

추진 예 : 이

// lib/model/om/BaseContent.php 
// Don't touch as it may be overwritten 
abstract class BaseContent extends BaseObject implements Persistent { 
... 
    public function getParameter() 
    { 
     return $this->parameter; 
    } 
... 
} 

// lib/model/Content.php 
// add or override here 
class Content extends BaseContent { 
    public function getParameter() 
    { 
     //Do something more 
     return parent::getParameter(); 
    } 
} 

어디서나 심포니 프로젝트 내에서 항상 기본 클래스를 상속 비 기본 클래스를 사용합니다.

기본 클래스 또는 교리 (폴더 아래에 '기본') 스키마에 정의 된 내용에 그 (것)들을 내놓고 (폴더 '톰'과 '지도'아래) PHP으로 ORMs 추진에 의해 생성됩니다.

+0

정확합니다. 덮어 쓸 때 기본 클래스에 아무 것도 추가해서는 안됩니다. 모든 코드를 모델 클래스에 보관하십시오. 일부 기본 메서드를 재정의해야 할 경우 모델 클래스에서 안전하게 수행 할 수 있습니다.이 메서드는 기본 클래스의 메서드를 여전히 재정의합니다. –

+0

@MichalTrojanowski 모델은 수업이 아닙니다. 모델은 추상화 계층입니다. "Model"클래스를 호출하면 동시에 'SRP'와 'LSP'를 위반하게됩니다. – Yang

+0

매우 정확하지 않다고 동의하지만이 용어를 여기에 사용하여 클래스 콘텐츠를 참조했습니다 'class BaseContent'에 추가합니다. 나는 미래에 코멘트를 쓸 때 더 조심하려고 노력할 것이다. :) –

관련 문제