簡體   English   中英

從Controller或ViewModel調用存儲庫的CRUD方法嗎?

[英]Call the repository`s CRUD-methods from the Controller or ViewModel?

這就是喬什·史密斯(Josh Smith)執行添加客戶程序的方式:

**CustomerViewModel**.cs:
    public void Save()
    {   
       _customerRepository.AddCustomer(_customer);
    }

        **CustomerRepository**.cs:
        public void AddCustomer(Customer customer)
                {
        //...
                        _customers.Add(customer);

                        if (this.CustomerAdded != null)
                            this.CustomerAdded(this, new CustomerAddedEventArgs(customer));

                }

        **AllCustomersViewModel**.cs(acts as Controller):
        void OnCustomerAddedToRepository(object sender, CustomerAddedEventArgs e)
                {
                    var viewModel = new CustomerViewModel(e.NewCustomer, _customerRepository);
                    this.AllCustomers.Add(viewModel);
                }

強文本這樣做會更好嗎?:

 **CustomerViewModel**.cs:
public void Save()
{   
   if (this.CustomerAdded != null)
                        this.CustomerAdded(this, new CustomerAddedEventArgs(customer));
}   

    AllCustomersViewModel.cs(acts as Controller):
    void OnCustomer**ADDING**ToRepository(object sender, CustomerAddedEventArgs e)
            {
                _customerRepository.Add(e.NewCustomer);
                var viewModel = new CustomerViewModel(e.NewCustomer);
                this.AllCustomers.Add(viewModel);
            }

CustomerViewModel.cs中的這一步驟也可以位於Controller中,因為Controller擁有客戶/產品/訂單等的服務/存儲庫的1 /全部引用。

if (this.IsNewCustomer)
                _customerRepository.AddCustomer(_customer);

當我現在仍然可以在同一控制器上使用Order / ProductViewModel時,我有3個存儲庫實例。 如果存儲庫位於實例化的控制器的Ctor中,則我只有一個實例。

使用josh smith架構,您在Controller和CustomerViewModel中都有一個customerRepo。

以我的想法,您在控制器中只有一個customerRepo,並且CustomerViewModel的Save / Add方法可以預訂到Controllers OnAddCustomer方法。

為什么喬希·史密斯(Josh Smith)

public event EventHandler<CustomerAddedEventArgs> CustomerAdded;

而不是

simple public Action<Customer> AddDocumentDelegate;

你怎么看? 您覺得我的想法有什么缺點嗎?

你的想法是對的。 viewModel應該是模型的特定於視圖的表示,並且不應調用存儲庫。 您的控制器可以從視圖中監聽事件(單擊按鈕,提交等),然后調用存儲庫。

您還應該檢查有關此主題的其他帖子-

http://www.weask.us/entry/mvvm-put-data-access-layer

MVVM在哪里放置數據訪問層?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM