微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c#在域驱动设计中放置业务规则

我正在学习域驱动设计,我对我应该制定业务规则的地方有点困惑.
假设我有一个名为Member的聚合根,它保存对实体密码的引用.
密码看起来像这样:

public class Password
{
    public string Hash { get; private set; }
    public string Salt { get; private set; }
    public DateTime ExpirationDate { get; private set; }

    public void GenerateNewPassword(string plainPassword)
    {
        //Some logic here
    }
}

我还有一个名为Settings的设置对象.设置从设置存储库加载.
该对象引用了另一个名为PasswordRules的对象.密码规则当然会检查方法CheckPasswordRequirements中的密码要求:

public bool CheckPasswordRequirements(string password)
{
    //Some logic here
}

所以我的问题是,它是保存此密码规则的最佳位置,还是应该将此方法移至Password类,因为密码对象负责检查给定的普通密码是否符合要求(然后我还应将设置存储库放在密码实体中)或者是否应该直接在创建成员对象的服务中进行此检查?
也许还有其他一些优雅的解决方案?

解决方法

没有明确的答案可以从业务逻辑中得出.两种方法都同样有效.我会采取更务实的观点:

>如果您的密码检查算法很简单,那么我会将CheckPasswordRequirements方法直接放在Password类中,并在c’tor中调用它.
>如果算法更复杂或将来可能会发生变化,那么您最好使用单独的Utility类(命名为PasswordChecker).作为变体,您也可以以扩展方法的形式执行此操作:

static class PasswordExtension
{
    public static bool CheckPasswordRequirements(this string password)
    {
        //Some logic here
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐