這就是方式,約什 - 史密斯是做加法-A-客戶程序:從Controller或ViewModel調用存儲庫的CRUD方法?
**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);
}
強大的文本 Wouldn`t它是更好地做到這一點?:
**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也可以在控制器中,因爲控制器對客戶/產品/訂單等的服務/存儲庫持有1 /全部參照...
if (this.IsNewCustomer)
_customerRepository.AddCustomer(_customer);
當我現在仍然有一個Order/ProductViewModel爲同一個控制器工作時,我有3個存儲庫實例。如果存儲庫將在控制器的Ctor實例化,我只有一個實例。
隨着喬希史密斯體系結構,你在控制器和CustomerViewModel中有一個customerRepo。
用我的想法,您在控制器中只有一個customerRepo,而CustomerViewModel的Save/Add方法可以訂閱Controllers OnAddCustomer方法。
爲什麼約什 - 史密斯花了
public event EventHandler<CustomerAddedEventArgs> CustomerAdded;
,而不是一個
simple public Action<Customer> AddDocumentDelegate;
你覺得呢?你認爲我的想法有什麼缺點嗎?
我還是又想起了它,看到我的想法有缺陷,有5000 CustomerViewModel對象在各做各的添加/保存方法:OnCustomerAdd(客戶),這樣我就必須聲明5000個事件erhm ...讀你的鏈接大聲笑現在我很困惑... – Elisabeth 2010-09-12 19:34:03
是的..讓你的意見調用適當的方法在控制器上。因此,當用戶操作提示您保存時,只需從視圖中調用保存在控制器上,然後控制器將執行數據訪問。 – 2010-09-12 20:09:18
正是我所觀察到的:josh smith在CustomerViewModel中有一個AddCustomer方法(保存),WAF(WPF應用程序框架)在BookController中具有AddCustomer/AddBook方法。視圖只是視圖的一個模型,所以它必須是關於誘導數據持久性等的鈍化......這就是控制器的工作。嗯似乎我得深入瞭解一下WAF相當大的應用程序,但充分考慮了架構:P – Elisabeth 2010-09-12 20:37:13