【发布时间】:2010-09-12 19:16:59
【问题描述】:
这就是 josh smith 执行 add-a-customer-procedure 的方式:
**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 拥有对 Customer/Product/Order 等的 Service/Repository 的 1/所有引用...
if (this.IsNewCustomer)
_customerRepository.AddCustomer(_customer);
当我现在仍然有一个 Order/ProductViewModel 为同一个控制器工作时,我有 3 个存储库实例。如果存储库在控制器的 Ctor 实例化中,我只有一个实例。
使用 josh smith 架构,您在 Controller 和 CustomerViewModel 中有一个 customerRepo。
根据我的想法,控制器中只有一个 customerRepo,并且 CustomerViewModel 的 Save/Add 方法可以订阅控制器的 OnAddCustomer 方法。
乔什·史密斯为什么要参加比赛
public event EventHandler<CustomerAddedEventArgs> CustomerAdded;
不是一个
simple public Action<Customer> AddDocumentDelegate;
你怎么看?你觉得我的想法有什么缺点吗?
【问题讨论】:
标签: wpf mvvm repository viewmodel