以我控制器,所有相關性通過注射接受,繼Dependency inversion principle,除了一個,映射器類,其由構造函數實例:我的Mapper類應該注入到我的控制器中,還是可以直接實例化它?
public class HomeController : Controller
{
private readonly ISomeAppService SomeAppService;
private readonly Mapper Mapper;
public HomeController(ISomeAppService someAppService)
{
SomeAppService = someAppService;
Mapper = new Mapper();
}
public ActionResult Index()
{
var someList = SomeAppService.GetSomeList();
var someListDTO = Mapper.Map(someList);
return View(new HomeIndexViewModel(someListDTO));
}
的SomeAppService
是一個應用層的服務中的前我域層。 Mapper接收域對象並返回視圖使用的DTO。
我的推理是,自從ViewModel represents only the data that you want to display on your view/page以來,我無法預見到任何需要用別的東西來替換Mapper的情況,或者這可能對測試不利。我也看不到這個Mapper類在任何其他表示層上被重用,因爲其他視圖可能與Web表示不同。對我來說,它感覺作爲控制器的一部分。
的問題是,這是正確的?我是否需要通過依賴注入來接收Mapper?我需要爲它定義一個接口嗎?如果是這樣,爲什麼?我想遵守固體原則,但我想知道他們是否以及如何在這裏應用。
一種方法是問問自己做什麼SANS映射類。大多數人寫一個私人函數來完成這項工作,或者如果對象足夠簡單,他們只需將其新增並進行內聯映射即可。然而,這個特殊情況看起來很詭異的原因是你的類被稱爲「Mapper」,並沒有進行任何特定的初始化(指示它被映射的對象),所以我只能假定它具有映射所有種類的知識對象,也許有些與這個控制器無關。這可能是這感覺有點臭的原因。 –