0

我想知道您是否发现以下模式在域驱动设计中有意义。

领域层由模型和存储库组成。应用层由处理来自用户界面或模型-视图-控制器模式中控制器的查询的服务组成。

结构细节:

// 装配模型:
公开课短语
{
    公共 int PhraseId { 获取;私人套装;}
    公共字符串 PhraseText { 获取;私人套装;}

    公共短语(字符串短语文本){ this.PhraseText = 短语文本;}

    public void SetId(int phraseId) { this.PhraseId = phraseId; }
}

// 程序集存储库(引用程序集模型):
公共接口 IPhraseRepository
{
    短语 SavePhrase(短语短语);
    短语 GetPhrase(int phraseId);
}

// 装配服务(引用装配模型和存储库):
公共类 PhraseService
{
    私有IPhraseRepository _phraseRepository;
    公共短语服务(IPhraseRepository 短语存储库)
    {
        _phraseRepository = 短语存储库;
    }
    公共短语 SavePhrase(字符串短语文本)
    {
        短语短语 = _phraseRepository.SavePhrase( new Phrase(phraseText) );
        // 做其他事情,如发送邮件、日志记录等。
        // ...
        返回短语;
    }
}

特别是,将方法移动到 Phrase 实体类中是否有意义?那样的话,怎么称呼?

编辑:

上面的示例在 moffdub 的回答和 Adeel Ansari 的评论后进行了修改。更改突出显示

我想问一下添加的 IPhraseRepository.GetPhrase(phraseId) 以及如何包含它?

4

2 回答 2

1

存储库应该接受一个短语,而不是一个字符串。我也不确定为什么 SavePhrase 方法返回一个短语。我倾向于使这些方法无效。

此外,请注意不要让域模型中的每个属性都具有公共 getter 和 setter。这可能会导致您陷入贫乏的领域模型。

于 2009-01-17T00:48:54.987 回答
0

只是一些想法:

SetId(int phraseId) 不应公开

Phrase 可以实现不会暴露 SetId(..) 的 IPhrase(或 IPhraseAggregate)

如果对短语实体的引用在保存后保持“有效”,则 SavePhrase(Phrase phrase) 可以(应该?)返回 void:

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
}
于 2009-07-09T10:11:15.167 回答