2010-11-18 6 views
3

나는 일종의 조사/감사 소프트웨어를 만들고 싶습니다. 수업을 만드는 방법을 브레인 스토밍하고 나를 지원할 수있는 디자인 패턴이 있는지 확인합니다. 왜냐하면 그 사람은 인생을 더욱 행복하게 만들어주는 것이기 때문입니다 ...질문/답변 감사 용 디자인 패턴

내 응용 프로그램에는 제목과 설명이 포함 된 질문이 있어야합니다. 그런 다음 여러 유형의 답변이 있습니다.

그래서 ... 하나 개의 유형은 예/아니오 대답 또 다른 유형은 또 다른 유형은 당신이 선택할 수있는 텍스트 응답 는 또 다른 유형은 3 개 지정된 텍스트의 선택이 될 수 확보 수 1 10 사이의 값이 될 수있을 수 하나 (저녁 식사는 좋았습니다, 좋았고, 고약한 냄새였습니다)

그래서 설문 조사 계획 사이트에서 나는 내 질문을 적고 대답 유형을 지정했습니다.

내가 대답과 질문의 컬렉션처럼 밟아하려는 설문 조사를 실행에 ...

은 기본적으로 문제는 모든 다른 응답 유형을 통합하는 방법과 데이터베이스에 저장하는 방법은?

나는 복합과 전략 패턴 보았다하지만 확실하지 않다 ... 나는 완벽한 솔루션이없는 알고 항상 ...

의존하지만 사람이 모범 사례를 공유 할 수 있다면 그것은 좋은 것입니다 그들은 사전에

감사합니다 ... ... 유사한 주제 dealed 방법에

답변

2

당신이 데이터베이스에서 사용할 수있는 다른 엔티티 매핑 전략은 무엇인가 여기에 묻는 것 같다? 즉, 당신은 할 수 있습니다

  1. 각각을 식별하기위한 판별 값을 가진 모든 엔티티에 대한 하나의 테이블 (값이 예를 들어 단지 토큰 화 된 문자열이 될 수 있음) 개체 당 테이블 - 기본적으로 큰지도
  2. 1 개체 당 테이블 : 1 선택적 등록

당신의 ORM 솔루션은 다시 데이터베이스에서 데이터를 읽고 객체 (엔티티)의 적절한 유형으로 변합니다 잘 지내 필드를 채우는 가입 . 중간 계층의 관점에서

, 당신은 다음과 같은 클래스가 필요합니다

AbstractQuestion

질문에 대한 추상 기본 클래스입니다. 제목, 설명 및 추상 ask() 및 answer() 메소드가 들어 있습니다. 질문 유형에 따라 다른 표시 메시지를 제공하는 AbstractQuestion의 다양한 하위 클래스가 있습니다. 예를 들어, MultiChoiceQuestion은 제목과 설명이 표시되도록 ask() 메서드를 구현합니다 (각 하위 클래스에 고유 한 모든 선택 항목과 함께 askQuest() 메서드로이 메서드를 가져올 수 있음) . 이것은 ask()가 Map을 매개 변수로 사용하여 원하는대로 채울 수 있도록 일반화 할 수 있습니다. 또는 varargs를 사용할 수 있습니다.

대답

소유 AbstractQuestion에 대한 참조를 사용하여 대답의 다양한 측면을 나타내는 알려진 키가있는지도를 포함하는 단순한 클래스입니다.

Questionaire

목록 배치 AbstractQuestions 컬렉션. 각 AbstractQuestion에 대해 ask() 메서드를 호출하고 사용자 입력을 기다린 다음 제공된 데이터로 answer() 메서드를 호출합니다.

추상 기본 클래스를 패턴으로 간주하지 않는 한 복잡한 디자인 패턴이 필요 없습니다. 위의 내용은 완전하지는 않지만 시작하면됩니다.

+0

답장을 보내 주셔서 감사합니다 ... TPT와 TPH를 보았습니다. 데이터 저장소에 대한 결정이라고 생각합니다. 그러나 나는 중간에있는 레이어에 대해 더 생각하고 있습니다. ORM 너머 ... –

+0

@serverinfo 질문을 더 자세히 타겟팅하도록 수정되었습니다. –