Вот как Джош Смит выполняет процедуру добавления клиента:
**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 также может находиться в Контроллере, поскольку Контроллер хранит 1 / все ссылки на Сервис / Репозиторий Клиента / Продукта / Заказа и т. Д. *
if (this.IsNewCustomer)
_customerRepository.AddCustomer(_customer);
Когда у меня все еще есть Order / ProductViewModel, работающая на тот же контроллер, у меня есть 3 экземпляра хранилища.Если хранилище будет в экземпляре Ctor контроллера, у меня есть только ОДИН экземпляр.
С архитектурой Джоша Смита у вас есть customerRepo в Controller AND CustomerViewModel.
С моей идеей у вас есть толькоОДИН customerRepo в контроллере И метод Save / Add CustomerViewModel можно подписать на метод Controllers OnAddCustomer.
Почему Джош Смит взял
public event EventHandler<CustomerAddedEventArgs> CustomerAdded;
, а не
simple public Action<Customer> AddDocumentDelegate;
Как вы думаете?Видите ли вы какие-либо недостатки в моей идее?