我正在旋轉一個MVC5應用程序在遺留的webforms站點內,以幫助重構/替換一些非常舊的代碼。一路上,我發現,正如舊webforms的典型情況,有一個巨大的類被創建來管理會話SessionManager中的值。顯然,這不是很可測,所以我已經隱藏的屬性,我需要一個服務背後:Asp.Net MVC服務層 - 附加服務vs通過參數
public class LegacySessionService : ISessionService
{
public IUser GetCurrentUser()
{
return SessionManager.CurrentIUser;
}
}
現在的問題是,其他服務中,是清潔讓控制器訪問會話服務並通過IUser,或讓工作服務知道並訪問會話服務?
public class MyController : Controller
{
/*skipping obvious dependency injection*/
public ActionResult DoStuff()
{
var viewModel = _someotherService.DoStuffWithIUser(_sessionService.GetCurrentUser())
return View("DoStuff", viewModel)
}
}
OR
public class SomeOtherService
{
/*skipping obvious dependency injection*/
public ViewModelClass DoStuffWithIUser()
{
var currentUser = _sessionService.GetUser();
//do more stuff, return ViewModel
}
}
哪個更正確的建築,爲什麼?我不知道。