2010-06-08 3 views
0

나는 현재 동일한 스키마를 가지고있는 sentreceived이라는 두 개의 테이블에 쓰는 메시지 시스템을 가지고있다.클래스 디자인 : 하위 클래스의 개체를 생성하기위한 개체를 만들기위한 것입니까?

Message이라는 공통 클래스를 인스턴스화하기 전에 사용자 입력 데이터를 채우는 클래스를 작성하여 나머지 속성을 설정하고 각각을 데이터베이스에 작성했습니다. 유일하게 중요한 차이점은 하위 클래스에서 해당 변수로 표시되는 하나의 필드입니다. 다른 모든 속성은 Message의 일부입니다.

사실, Message은 생성 된 객체에 일반적인 메소드와 속성을 제공하고 데이터베이스 클래스에 대한 액세스를 용이하게하는 것 이외의 목적을 가지고 있지 않습니다.

이것은 나쁜 생각입니까? Message 클래스가 모 놀리 식입니까? 아니면 한 필드를 위해 하위 클래스를 추가해야합니까? 클래스를 완전히 분리하고 전송 용으로 하나를, 수신 테이블에 하나를 사용하는 것이 더 나은 접근 방법입니까?

답변

1

나쁜 디자인이 아닙니다. 기본적으로 abstract class을 만들었습니다. 이러한 클래스는 인스턴스화하지 않고 다른 여러 클래스에서 공통적 인 코드를 포함합니다. 차이가 정말 정말 작은 경우, 당신은 아마 하나 개의 클래스에 최선을 다하는하여 디자인을 쉽게, 물론 DRY - Don't repeat yourself.

:

당신은 원칙을 따랐다.

+0

내가 작성한 방식은 'Message' 클래스가 사용자에 의해 인스턴스화 된 것이므로 걱정거리입니다. 스키마와 관련된 차이점은'last_update' (datetime) vs'date_read' (datetime)이며, 클래스에서 사용하는 테이블 이름입니다. 메시지를 보내는 다른 모든 기능 (입력 유효성 검사, 입력 이스케이프, 테이블에 쓰기 등)은'Message'의 일부이거나'Message'의 일부로 호출됩니다. 유일한 차이점은받은 편지함 및 보낼 편지함을 표시하는 쿼리이며 심지어 거기서도 해결할 수 있다면 공통 클래스를 고려하고 있습니다. –

+0

@MrXexxed : 클래스가 사용자에 의해 인스턴스화되는 경우 하위 클래스는 어떻게 작동합니까? –

+0

클래스는 (예를 들어) send message 페이지에 의해 인스턴스화되고,'Message-> send_message'가 호출되어 In_Msg와 Out_Msg 인스턴스를 생성합니다. 그래서 나는 내가 필요로하는 것보다 스스로 힘들게 만들고 있는지 궁금해하고 있습니다. –

0

그래서 당신은 메시지 클래스를 불렀다 그 시설 일반적인 기능, 그리고 자식 클래스 (즉)

에 '보낸 메시지'에 대해 특정 작업을 용이하게
class SentMessage extends Message { 

?

완벽한 의미입니다. 그것은 얼마나 많은 기능이 분리되어 있는가에 달려 있습니다. 유일한 차이점은 SentMessage와 ReceivedMessage가 '보낸 사람'또는 '수신자'라고 표시되어있는 경우 Message 클래스에서 getMessageType() 함수를 사용하는 것이 좋습니다. 그러나 더 복잡하다면, 그렇습니다. 올바른 길을 가고 있습니다.

관련 문제