2013-06-28 37 views
0

我今天上午就消耗邏輯本地化將執行我們的模型的定位潛在的方法一場辯論。「乾淨」在ASP.NET MVC定位邏輯的消費

的問題是,什麼是對定位邏輯的消費清潔執行?

選項1:上控制器使用AOP樣式篩選器操作

[LocalizeModel] 
    public ActionResult Index() 
    { 
     Menu menu = _menuRepository.GetMenu(MENU_TYPE); 

     return PartialView("Index", menu); 
    } 

LocalizeModel屬性將攔截返回值,並執行基於其類型的模型的定位(定它實現了一個給定的接口)。

方案2:通過依賴注入

public MenuController(IMenuRepository menuRepository, ILocalizeMenus menuLocalization) 
    { 
     _menuRepository = menuRepository; 
     _menuLocalization = menuLocalization; 
    } 

    public ActionResult Index() 
    { 
     Menu menu = _menuRepository.GetMenu(MENU_TYPE); 

     _menuLocalization.LocalizeAllText(menu); 

     return PartialView("Index", menu); 
    } 

另一個選項消費?

+0

使用一個裝飾(在接受的答案)是我的選擇,我喜歡它是如何減少控制器的依賴,以及隱藏多次調用MenuRepository(這固然不是一個倉庫我的模式的定義)。 – holsee

回答

1

可以創造超過IMenuRepository menuRepository一個裝飾,當你調用_menuRepository.GetMenu(MENU_TYPE),它會做本地化,代碼會是這個樣子:

public class LocalizerDecorator : IMenuRepository menuRepository 
{ 

    private IMenuRepository originalRepository; 
    private ILocalizeMenus menuLocalization; 


    public LocalizerDecorator(IMenuRepository originalRepository, ILocalizeMenus menuLocalization) 
    { 
     this.originalRepository = originalRepository; 
     this.menuLocalization = menuLocalization; 
    } 

    public Menu GetMenu(string MENU_TYPE) 
    { 
     var result = this.originalRepository.GetMenu(TYPE); 
     this.menuLocalization.LocalizeAllText(result); 
     return result; 
    } 

} 

然後,你需要配置你DI使用你的裝飾,而不是真正的倉庫