간단한 요구 사항은 다음과 같습니다.
사용자
Question
는 여러 개의를 사용하여 를 만듭니다Answer
.Question
하나 이상이 있어야합니다Answer
.설명 : 생각
Question
하고 테스트 와Answer
같이 : 하나의 질문이 있지만 몇 가지 대답이 있습니다. 사용자는이 테스트를 준비하는 행위자이므로 질문과 답변을 만듭니다.
이 간단한 예제를 모델링하여 1) 실제 모델과 2) 코드로 표현하여 잠재적 인 오용 및 오류를 최소화하고 모델 사용 방법에 대한 힌트를 개발자에게 제공하려고합니다.
질문은 실체 이며, 답변은 가치 객체 입니다. 질문에 답이 있습니다. 지금까지 가능한 해결책이 있습니다.
[A] 공장 내부Question
Answer
수동으로 생성하는 대신 다음을 호출 할 수 있습니다.
Answer answer = question.createAnswer()
answer.setText("");
...
그 대답을 만듭니다 그리고 그것은 질문에 추가 할 수 있습니다. 그런 다음 속성을 설정하여 답변을 조작 할 수 있습니다. 이런 식으로 질문 만 답을 만들 수 있습니다. 또한 우리는 질문없이 답변을하지 않습니다. 그러나 답변은 하드 코딩되어 있으므로 답변 작성을 제어 할 수 없습니다 Question
.
위 코드의 '언어'에는 한 가지 문제가 있습니다. 사용자는 질문이 아니라 답변을 만드는 사람입니다. 개인적으로, 나는 우리가 가치 객체를 생성하는 것을 좋아하지 않으며 개발자에 따라 가치를 채울 필요가 없습니다-어떻게 추가 해야하는지 확신 할 수 있습니까?
[B] 공장 내부 질문, # 2
일부에서는 다음과 같은 방법을 사용해야한다고 말합니다 Question
.
question.addAnswer(String answer, boolean correct, int level....);
위의 솔루션과 마찬가지로이 방법은 답변에 필수 데이터를 가져 와서 질문에 추가 할 데이터를 만듭니다.
여기서 문제는 우리가 아무 이유없이 생성자를 복제 한다는 것 Answer
입니다. 또한 질문은 실제로 답을 만들어 줍니까?
[C] 생성자 의존성
우리 스스로 스스로 두 물건을 자유롭게 만들자. 또한 생성자에서 종속성을 표현해 봅시다 :
Question q = new Question(...);
Answer a = new Answer(q, ...); // answer can't exist without a question
질문없이 대답을 만들 수 없으므로 개발자에게 힌트를줍니다. 그러나 질문에 답이 '추가'되었다는 '언어'는 보이지 않습니다. 반면에, 우리는 정말로 그것을 볼 필요가 있습니까?
[D] 생성자 의존성, # 2
우리는 반대로 할 수 있습니다 :
Answer a1 = new Answer("",...);
Answer a2 = new Answer("",...);
Question q = new Question("", a1, a2);
이것은 위와 반대되는 상황입니다. 여기서 대답은 질문 없이는 존재할 수 있지만 (의미가없는) 질문은 대답 없이는 존재할 수 없습니다 (의미가 있음). 또한, '언어'여기 것 그 질문에 더 분명하다 이 답변을.
[E] 일반적인 방법
이것이 내가 일반적인 방법이라고 부르는 것입니다. ppl이 가장 먼저하는 일은 다음과 같습니다.
Question q = new Question("",...);
Answer a = new Answer("",...);
q.addAnswer(a);
답변과 질문이 서로없이 존재할 수 있기 때문에 위의 두 답변 중 '느슨한'버전입니다. 당신은 아무 특별한 힌트가 없다 가 함께 바인딩은.
[F] 결합
또는 C, D, E를 결합하여 관계를 만드는 방법을 모두 다루어야 개발자가 자신에게 가장 적합한 것을 사용할 수 있습니다.
질문
나는 사람들이 위의 답변 중 하나를 선택하여 위의 답변 중 하나를 선택할 수 있다는 것을 알고 있습니다. 그러나 위의 변형 중 하나가 다른 이유보다 나은지 궁금합니다. 또한 위의 질문에서 생각하지 마십시오. 대부분의 경우에 적용될 수있는 몇 가지 모범 사례를 짜고 싶습니다. 동의하면 대부분의 사용 사례는 유사합니다. 또한 여기서 기술과 무관하게하자. ORM 사용 여부를 생각하고 싶지 않습니다. 좋은 표현 모드를 원하십시오.
이것에 대한 지혜?
편집하다
Question
및의 다른 속성은 무시하십시오 Answer
. 질문과 관련이 없습니다. 위의 텍스트를 편집하고 필요한 경우 대부분의 생성자를 변경했습니다. 이제 필요한 속성 값을 수락합니다. 그것은 단지 질문 문자열이거나 다른 언어, 상태 등의 문자열 맵 일 수 있습니다-전달 된 속성에 관계없이 이것에 초점이 맞지 않습니다. 고맙습니다!