문제

도메인 구동 디자인에서 다음 패턴을 의미하는지 알고 싶습니다.

도메인 층은 모델과 저장소로 구성됩니다. 애플리케이션 계층은 사용자 인터페이스 또는 Model-View-Controller 패턴의 컨트롤러에서 쿼리를 처리하는 서비스로 구성됩니다.

구조의 세부 사항 :

// Assembly Model:
public class Phrase
{
    public int PhraseId { get; 사적인 set; }
    public string PhraseText { get; 사적인 set; }

    public phrase (string phrasetext) {this.phrasetext = phrasetext; } public void setId (int phraseId) {this.phraseid = phraseId; }
}

// Assembly Repository (references assembly Model):
public interface IPhraseRepository
{
    Phrase SavePhrase(문구 문구);
    구절 getphrase (int phraseId);
}

// Assembly Services (references assemblies Model and Repository):
public class PhraseService
{
    private IPhraseRepository _phraseRepository;
    public PhraseService(IPhraseRepository phraseRepository)
    {
        _phraseRepository = phraseRepository;
    }
    public Phrase SavePhrase(string phraseText)
    {
        Phrase phrase = _phraseRepository.SavePhrase(새로운 문구 (phrasetext));
        // doing other things like sending mail, logging, etc.
        // ...
        return Phrase;
    }
}

특히, 메소드를 문구 엔티티 클래스로 옮기는 것이 합리적입니까? 이 경우 어떻게 호출 될까요?

편집하다:

위의 예는 Moffdub의 답변과 Adeel Ansari의 의견 후에 수정되었습니다. 변경 사항이 있습니다 강조 표시.

추가 된 iphraserepository.getphrase (phraseId)에 대해 물어보고 싶습니다.

도움이 되었습니까?

해결책

저장소는 문자열이 아닌 문구를 가져와야합니다. 또한 SavePhrase 메소드가 왜 문구를 반환하는지 잘 모르겠습니다. 나는 그러한 방법을 무효화하는 경향이 있습니다.

또한 도메인 모델의 모든 속성을 공개적으로 만드는 데주의를 기울여야합니다. 이로 인해 빈혈 영역 모델로 이어질 수 있습니다.

다른 팁

몇 가지 생각 :

setid (int phraseid)는 공개되어서는 안됩니다

문구는 setid를 노출시키지 않는 iphrase (또는 iphraseAggregate)를 구현할 수 있습니다 (..)

저장 후 문구 엔티티에 대한 참조가 "유효한"상태를 유지하면 SavePhrase (Phrase phrase)를 반환 할 수 있습니다.

public void SavePhrase(string phraseText)
{
    Phrase phrase = new Phrase(phraseText); // NOTE: keep a reference to phrase
    this._phraseRepository.SavePhrase(phrase); // NOTE: returns void

    return phrase; // NOTE: assume the repository sets the phrase.PhraseId
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top