【问题标题】:Should a respository be responsible to update specified field of model stored in external service?存储库是否应该负责更新存储在外部服务中的模型的特定字段?
【发布时间】:2016-01-28 15:19:54
【问题描述】:

我了解存储库应该负责存储库模式中的 CRUD。 我的问题是:存储库是否应该负责更新存储在外部服务中的模型的指定字段?

例如:

  • UserAccount 数据存储在外部 Web 服务中。
  • 用户可以有多个UserAccount
  • 通过app,用户可以选择目标UserAccount,可以更新UserAccount的displayName
  • 有些词不允许在 displayName 中使用,应用不知道这些词是什么。

pesdocode:

public class MainController
{
    IUserAccountService userAccountService; // injected

    public void Main ()
    {
        userAccountService.GetUsers ().Then (UpdateUserView);
    }

    // ...

    void OnUserAccountSelected (UserAccount selectedUserAccount, string newDisplayName)
    {
        userAccountService.UpdateDisplayName (selectedUserAccount, newDisplayName)
        .Then (UpdateUserView)
        .Catch<WordInDisplayNameNotAllowedException> (HandleWordInDisplayNameNotAllowedException)
        .Catch (HandleError);
    }
}

public class UserAccountService : IUserAccountSercie
{
    IUserAccountRepository repository; // injected

    // ...

    public Promise<UserList> GetUsers ()
    {
        return repository.GetAll ();
    }

    public UpdateDisplayName (UserAccount userAccount, string newDisplayName)
    {
        // Should I like the following?
        repository.UpdateDisplayName (userAccount, newDisplayName);
    }
}

public class UserAccountRepository : IUserAccountRepository
{
    public Promise<UserList> GetAll ()
    {
        // request to external web service...
    }

    public Promise<UserAccount> UpdateDisplayName (UserAccount userAccount, string newDisplayName)
    {
        // request to external web service...
    }
}

我应该把代码放在哪里来调用 web API 来更新UserAccount::displayName?

【问题讨论】:

  • 存储库是进行更新调用的地方。在这种情况下,外部 Web API 是您的数据存储,因此请让存储库负责使用它。

标签: design-patterns model-view-controller domain-driven-design repository-pattern


【解决方案1】:

这样的用例逻辑应该放在应用服务中。存储库应该只关心更新整个聚合。

我认为this answer of mine 将提供有关应用程序服务的足够信息,从而为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2011-06-11
    • 2012-02-13
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2012-02-10
    • 2019-01-16
    相关资源
    最近更新 更多