2009-06-09 4 views
1

나는 RAR, ZIP 및 Trip 클래스 집합을 작성하고 있습니다. 그들은 모두 공통 관심사를 공유합니다. 즉, 아카이브 형식입니다. 그래서 나는 처음에이 일에 대해 생각 :클래스 구성 및 명명에 대한 질문

1) 기본 추상 클래스

abstract class Archive {} 

쓰기 "라이브러리/아카이브/archive.php"에 배치합니다.

2) 쓰기 우편, 같은 RAR 및 여행 클래스 "라이브러리/아카이브/zip.php"

3) 특정 클래스에 액세스 (예 : 우편에서

class Archive_Zip extends Archive {} 

하고 배치)

$this->archive->zip->... 

이것은 나의 초기 접근 방식입니다. 그러나 이것이 좋은 접근이라고 생각하십니까? 처음부터 추상화해야합니까? "libraries/zip.php"파일 (및 다른 모든 파일은 별도로)을 작성하는 것에 대한 장단점은 무엇입니까?

내 접근 방식에 대한 제안이나 주장이 있으십니까? 내가 저질렀던 나쁜 일이 있습니까? 이 같은

답변

1

# 3 정말 # 1, # 2 다른 접근 방식에서 수행하지 않기 때문에 당신이 그것을 필요로 할 때 단지 객체를 생성하는 것입니다 .. :

$archive = new Archive_Zip(); 

완료. 필요한 것 이상으로 복잡하게 할 필요가 없습니다.

1

추상 클래스의 주요 이점은 코드 전체에서 사용할 수있는 공통 인터페이스입니다. 그런 다음 일련의 코드를 변경하지 않고도 구현을 다른 아카이브 형식으로 전환 할 수 있습니다. 저는 PHP를 많이 사용하지 않았기 때문에이 답변은 일반적인 OOP 원칙을 기반으로합니다. 공통 접근법을 공유하기 때문에 접근법이 접근법의 좋은 후보자가 될 것 같습니다.

0

개인적으로 나는 추상적 인 클래스를 많이 사용하지 못했습니다. 기껏해야, 그들은 당신 자신의 코드를 검사하는 것으로 보이고, 당신이 당신의 서브 클래스 내에서 일련의 메소드를 정의했는지 확인해야한다.

상속 자체가 잘 수행되며 하위 클래스에 공통된 메소드가 여러 개있는 경우 기본 Archive 클래스를 유지하는 데 도움이됩니다.

1

구현에 따라 다릅니다. Strategy 패턴을 사용하여 사용할 압축 알고리즘을 결정 하시겠습니까? 압축 알고리즘이 다른 비트의 코드에서 상호 교환 적으로 사용될 수 있다면 추상화하십시오.

동일한 계약을 준수하고 공통 기능을 공유해야합니까? 아마. 이것은 추상화를 잘 사용합니다.

또한 가독성을 위해 논리적 연관성을 만드는 데 도움이된다면 이동하십시오. 그게 내 걸릴거야.

0

이 문제에서, 아카이브의 기본 클래스를 가지고의 좋은 점은, 정말 당신을 안내한다입니다 아카이브 형식을 고려하지 않고 클라이언트 코드가 아카이브 파일을 조작하기위한 공용 메소드 세트를 정의합니다. 다른 방법은 다른 모든 클래스에서 구현하는 아카이브 인터페이스를 정의하는 것입니다. 그러나 모든 클래스에서 공통 코드로 끝나게 될 것이라고 생각합니다. Archive를 기본 클래스로 사용하면 그것을 놓기에 좋은 장소입니다.)

관련 문제