我寫了下面的類關於DI和SRP
public class UserApplication
{
private IUserRepository UserRepository { get; set; }
private IUserEmailerService UserEmailerService { get; set; }
public UserApplication(IUserRepository userRepository, IUserEmailerService userEmailerService)
{
this.UserRepository = userRepository;
this.UserEmailerService = userEmailerService;
}
public bool Authenticate(string login, string pass)
{
// Here I use UserRepository Dependency
}
public bool ResetPassword(string login, string email)
{
// Here I only use both Dependecies
}
public string GetRemeberText(string login, string email)
{
// Here I only use UserRepository Dependency
}
}
我使用統一的管理我的實例,使我意識到,當我問的容器,我只用在只有一個方法,這樣既依賴給這個類的一個實例,兩個依賴項都被注入到這個類中,但我不需要這兩個實例,所以在Authenticate用戶中我只需要存儲庫。 所以我錯了嗎?有沒有另一種方法,只有我在這堂課的所有案例中使用依賴性?
我想到用命令模式到,所以我班3班有一個方法,只有依賴我需要裏面,像這樣:
public class AuthenticateUserCommand : ICommand
{
private IUserRepository UserRepository { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public void Execute()
{
// executes the steps to do that
}
}
public class ResetUserPasswordCommand : ICommand
{
private IUserRepository UserRepository { get; set; }
private IUserEmailerService UserEmailerService { get; set; }
public string Login { get; set; }
public string Email { get; set; }
public void Execute()
{
// executes the steps to do that
}
}
對於ASP.NET MVC,由於控制器的性質,我可以看到第一個示例更可取,後一個示例可以很好地適用於WPF MVVM,因爲您可以直接綁定您的命令。這實際上取決於你使用的是什麼技術。 – Romoku 2013-03-13 02:34:52
沒有這個類是ASPNET MVC的一部分,這是我係統的一個層。 – Greg 2013-03-13 03:55:48
當一個類被注入一個不主要由那個類使用的依賴時,這可能意味着這個類可能做了它不負責的事情,從而打破了可能不是你的情況的SRP原則,我只是建議。 – 2013-03-14 01:40:25