这就是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 AND CustomerViewModel中拥有customerRepo。
根据我的想法,您在控制器中只有一个customerRepo,并且CustomerViewModel的Save / Add方法可以订阅Controllers OnAddCustomer方法。
乔希史密斯为什么选择
public event EventHandler<CustomerAddedEventArgs> CustomerAdded;
而不是
simple public Action<Customer> AddDocumentDelegate;
你怎么看?你觉得我的想法有什么不利之处吗?
答案 0 :(得分:0)
你的想法是对的。 viewModel应该是模型的视图特定表示,不应该调用您的存储库。您的控制器可以从视图中侦听事件(按钮单击,提交等),然后调用存储库。
您应该检查此主题的其他帖子 -