用nlayers理解srp原理

时间:2014-01-22 07:22:26

标签: c# layer solid-principles single-responsibility-principle

我有一个包含以下图层的Web应用程序:

  1. 查看
  2. 商业
  3. 实体
  4. 存储库
  5. 我想在用户注册时向用户发送电子邮件。

    我在Entities图层中有User类,在Business层中有UserBussines和MailBusiness类。

    问题是我不知道将电子邮件发送给用户的位置是正确的。

    我看到了一些选项

    1)在控制器中:

    UserBusiness.AddUser();
    MailBusiness.SendEmail();
    

    2)在业务中

    UserBusiness.AddUserAndSendEmail()
    {
        AddUser();
        MailBusiness.SendEmail();
    }
    

    在这两个选项中,我认为我没有按照SOLID原则履行SRP,因为我在一种方法中承担了两项责任。

    我不理解这个原则?或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

您有用户注册方案:

Given not registered user
When user registers
Then user becomes registered
And greeting mail is sent

此业务情景应存在于您的业务逻辑层中,因为:

  • 这是您商业领域的情景
  • 无论您使用的是Web应用程序,桌面应用程序还是移动应用程序,都应该存在。

因此,您应该拥有一些应用程序服务(例如UserService),它将充当用户存储库和电子邮件服务的协调者:

public void RegisterUser(User user)
{
    // possibly you should also check that user is not registered yet
    _userRepository.Add(user);
    _emailService.SendGreeting(user);
}