2012-08-28 3 views
0

블로그를 디자인하는 중입니다. 내 OO 디자인 경험은 실제로 제한되어 있으므로 내 기술을 개선하고 개선하는 것이 좋은 생각이라고 생각하지만 최선의 접근 방법에 대한 조언을 찾고 있습니다.기본 객체 디자인 문제

나는 최소한의 블로그 도구를 쓰고 있습니다. 나는 블로그 객체 (클래스 블로그)를 가지고 있고 객체 객체 (클래스 객체)를 가지고 있고 게다가 저장 객체 (클래스)를 가지고있다. 블로그에는 새 기사를 작성하고 나열하는 등의 방법이 있습니다. 게시물 특유의 메타 데이터 (예 : 게시물 제목, 게시물 본문, 작성일, 마지막 업데이트, 공개 또는 비공개 등) 및 저장 객체 (클래스 저장소) 평균 데이터베이스 또는 폴더, SCM 리포지토리 등이 될 수 있습니다.

이제 처음에는 무지에서 클래스 기사가 클래스 블로그를 확장하는 클래스 계층을 정의하는 것으로 시작했습니다. 블로그의 메소드를 사용하는 특정 요구가 없기 때문에 (또는 심지어 재정의 할 수도 있기 때문에) 매우 적절하지는 않습니다. 그렇다면 두 개의 별도 클래스 (블로그 및 기사)와 블로그가 할당되고 기사 객체의 비공개 목록을 유지하십시오 (기사 당 하나).

이제 저장소 클래스를 가로 챈 곳에 어딘가에 꽂아야하고, 어디서 어떻게 움직이는 지 잘 모르겠습니다. 어떤 충고? 나는 올바른 방향으로 가고 있는가?

감사

+1

이 질문은 너무 막연하고 너무 광범위하여 스택 오버플로가 아닙니다. http://programmers.stackexchange.com에 더 적합 할 수도 있습니다. 나는 귀하의 게시물에 이동을 요청하도록 플래그를 지정했습니다 (이는 의미가있는 것은 아니며 단지 하나의 플래그 임). –

+0

PSE 개조가 정상적으로 작동하는지 여부를 기다리는 중입니다. – Kev

+1

예를 들어 블로그는 컨테이너와 유사합니다. 기사가 포함될 수 있습니다. 그래서 두 사람 사이의 관계는 상속 중 하나가 아니지만 봉쇄 (또는 집합)보다 비슷합니다 –

답변

1

그냥 몇 가지 아이디어를 공유 할 수

1) 일반적으로 코딩과 디자인을 돌이켜 보면 도움이됩니다. 먼저 프로토 타입을 작성하고 작동 시키십시오. 기능적 코드베이스를 얻으면 객체 구조를 리팩터링하고 다시 작업 할 수 있습니다. 파이썬은 이것에 완벽합니다.

2) 기본 클래스는 가능한 한 포괄적이어야합니다. 내가 너라면 기본 클래스 Publishable을 정의 할 수있다. 그러면 Blog 클래스를 Publishable에서 확장 할 수 있습니다. 미래에는 여러 유형의 기사를 추가 할 수 있습니다. 견적, 사진 및 링크 (예를 들어 Tumblr 사용). 당신이 OO 개념에 상당히 새로운 그래서보다는 설명하려고 비록 내가 (예를 들어 시간을 게시) 지속성과 공통의 메타 데이터로 낮은 수준의 로직을 구현합니다 Publishable 클래스에서

+0

감사합니다. OOP 관련 게시물에서이 "지속성"에 대해 듣는 것 같습니다. 더 잘 설명해 주시겠습니까? – CaseyJones

+0

@CaseyJones 짧은 대답은 여기에 있습니다 : 지속성은 데이터베이스에 개체를 저장하는 것입니다. 매우 강력한 파이썬 지속성 라이브러리 인 sqlalchemy를 확인해 볼 수 있습니다. 나중에 더 자세한 대답을 준비 할 수 있는지 알게 될 것입니다. –

1

내가거야 보인다 올바른 방향으로 가리 키세요. 나는 당신이이 과제를 완수하기 전에 당신에게 여전히 자기 주도적 인 연구/학습을 꽤 많이하고 있다고 생각합니다.

OO 과정을 수강하면, 상속 모델은 "is-a"관계라고 말할 것입니다. 당신이 목격 한대로, 기사는 상속이 부 자연스럽게 느껴지는 이유는 블로그가 아닙니다. polymorphism에 대한 상속을 사용할 때 가장 많은 돈을 벌 수 있습니다. 그럼 그걸 연구 해봐.

둘째, Storage 객체를 "연결"하기 위해 많은 응용 프로그램이 계층화 된 접근 방식을 따릅니다. 각 레이어는 위/아래 레이어와 상호 작용합니다. 하나의 방식이 가능할 수있다.

Layer 1) User Interface 
This layer displays the UI (command line or GUI) and reads user input 

Layer 2) Application Logic 
This layer will perform the actions that end-users need the system to do. Some things 
in this layer may be: sign up new user, create new blog, create new article 

Layer 3) Storage Layer 
This layer interacts with the underlying data store (database, file, whatever) 

각 층은 인접 층과 통신 할 수있다. 다중 계층 응용 프로그램에 대한 연구를 수행하십시오.

행운을 빈다.

-1

아키텍처면에서 블로그가 전체 응용 프로그램이기 때문에 블로그 클래스가 필요하다고 확신하지는 않습니다. 당신은 기사 클래스, 코멘트 클래스, 사용자 클래스 등을 가질 수 있습니다.

class B을 확장해야하는지 확인하려면 AB인지 스스로 물을 수 있습니다. 예를 들어 동물원을 대표하고 클래스가 LionAnimal 인 경우 은 Animal이므로 LionAnimal입니다.

저장 부분의 경우 MySQL 또는 Postgresql과 같은 데이터베이스를 사용하는 것이 좋습니다. 파이썬으로 적절한 드라이버 (mysql의 경우 mysqldb, 포스트그레스의 경우 psycopg2)를 사용하여 제어 할 수 있습니다.

또는 django과 같은 프레임 워크를 사용할 수 있습니다. 수업을 저장하고 코드를 체계화하며 응용 프로그램에서 웹 사이트를 만드는 것이 훨씬 쉬워집니다.

+0

동적 웹 블로그가 아닙니다. 그것은 평범한 블로그가 될 것입니다. 즉, 호스트에 복사 할 수있는 것들을 오프라인으로 생성합니다. 그래서 장고는 여기에서 가장 잘 활용되지 않습니다. 나는 KISS 원리를 적용하려고합니다. – CaseyJones