Ваша модель обычно не должна содержать бизнес-логики. Если это так, извлеките эту модель в ViewModel
, и единственная логика в ней должна быть вашим кодом, связанным с отображением. Любые бизнес-методы должны существовать в отдельном классе. Некоторые предпочитают использовать ViewModels
все время вместо общих моделей (например, CustomerEditViewModel
вместо просто Customer model
).
Контроллер должен быть очень легким и не иметь кода доступа к данным. Обычно я называю метод репозитория ( Шаблон репозитория ) для простой загрузки данных и Шаблон фасада в качестве шлюза для любых выполняемых бизнес-методов.
Например, вместо того, чтобы иметь код загрузки данных, некоторые вычисления и некоторый код сохранения, все это можно поместить в класс фасадов, который принимает модель или customerId
и выполняет что-то вроде:
CustomerRepository repository = new CustomerRepository();
Customer customer = repository.GetCustomer(customerId);
// call some business methods, assign data, etc.
..
..
// now save
repository.SaveCustomer(customer);
Ваш класс репозитория обычно закодирован для интерфейса; это делает вывод данных / насмешки над этими классами для загрузки «поддельных» данных чрезвычайно простым, а также отделяет ваш контроллер и фасад от прямой связи с конкретной реализацией класса, но вместо этого с интерфейсом.