[英]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應該是模型的特定於視圖的表示,並且不應調用存儲庫。 您的控制器可以從視圖中監聽事件(單擊按鈕,提交等),然后調用存儲庫。
您還應該檢查有關此主題的其他帖子-
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.