4
我一直在想如何處理MVC解決方案中的ViewModels。我認爲,在閱讀不同的帖子和博客後,最好的方法是讓構建者實現一個接口,然後將這些接口注入控制器本身。MVC中ViewModel構建器的接口
使用automapper我會在每個構建器的實現中做實體和視圖模型之間的映射,並且控制器將保持非常精簡。
所以我創建這個接口
public interface IViewModelBuilder<TViewModel, TEntity>
{
TViewModel Build(TEntity entity);
}
因爲我忽略有關使它們協變和逆變的警告時刻(如果那是需要不知道)。
對於一個特定的ViewModel,雖然我需要從兩個不同的服務中獲取兩個實體,所以我不知道應該傳遞什麼類型的參數。
public class ConcreteVMBuilder: IViewModelBuilder<concreteVM, ????>
也許該界面不正確?
我明白合併在控制器中獲取的兩個實體不是一個乾淨的解決方案,對嗎?
如果有人可以幫我個忙,我將非常感謝
嗨Charleh,謝謝你的評論。這個或多或少是我所指的選項,將它們合併到另一個模型中,現在你已經「編碼」了它對我來說看起來不那麼糟糕。我想到的另一個選擇是將userId(這是我用於提取兩個實體的那個,我錯過了我的問題中的那個重要部分)傳遞給構建器。在這種情況下,我將獲取其中的實體,而不是在控制器中這樣做,因此我需要注入類來調用服務,這是否有意義? – mitomed
是的兩種方法都應該可以工作 - 說實話,關於注入參數而不是實際實體的想法更符合我將要做的事情。這種方式取決於收集所需實體數據以構建虛擬機的「構建者」 - 這與我在其中一個項目中採用的方法幾乎完全相同,不同之處在於虛擬機自身構建(實例化通過容器完成並且然後注入參數,虛擬機自行設置 - 構建器只是打包構建調用) – Charleh