Как далеко я разбиваю отдельные задачи в типичном сценарии «Веб-приложение реагирует на ввод пользователя»?
Например, в приведенном ниже случае, скажем, сценарий «Пользователь отправляет форму, в результате чего пользовательские данные превращаются в объект (технические данные), а затем сохраняются в базе данных».
Я использую различные сервисы для получения, фильтрации, сохранения объектов и сохранения данных. Конкретно, например, по моему $domainObject = ...
строка ниже исключительно копирует данные из массива в объект (аналогично этому Как называется шаблон, в который он получает данные или запрашивает данные и возвращает обратно объект?)
Я спрашиваю, если, продолжая разделять отдельные проблемы, с которыми я сталкиваюсь, на различные классы, службы и методы, я усложняю себе или будущим сопровождающим в долгосрочной перспективе?
class Controller
{
//saves a domain object acquired from an HTML form & other sources
function saveAction()
{
// acquire data from GET, POST, COOKIE, SESSION, database, et
$inputData = $this->inputService->acquireData();
// clean data
$filteredData = $this->filterService->filter($inputData);
// marshall data into an object
$domainObject = $this->objectService->createObject($filteredData);
//save object into a database
$id = $this->repository->save($domainObject);
// Send $id to View
return new ViewModel(array(
'id' => $id
);
}
Для ясности
Давайте назовем «передачу параметров» как «проводку».
$inputData
, который я получаю от inputService
, filterService
, который возвращает$filteredData
,objectService
,$domainObject
конец провода. repository
и получить обратно ID$id
конец провода и запустить его в мой ViewModel
и это конечная точка.^^^^ Выше приведена вся схема, которую я делаю, и это должно произойти, когда я использую разделение проблем, чтобы разделить мой код на различные конструкции кода inputService, filterService, objectService, repository, ViewModel
,
Проводка соединяет их вместе.
Я могу «обмануть» и объединить некоторые конструкции кода, чтобы свести к минимуму передачу. (минимизируйте передачу параметров везде).
И вот о чем мой вопрос.
Вопрос
Является ли полезной разводка отдельных конструкций кода (передача параметров между различными службами)? Должен ли я сделать больше? Должен ли я делать меньше? Есть ли техника, о которой я не знаю, которая делает это не проблемой?
Я бы сказал, что это зависит от бизнес-логики и области проблемы, которую вы пытаетесь решить. Если вы видите такие фреймворки, как Ruby On Rails или Laravel, они пытаются использовать MVC для решения типичных проблем веб-приложений. Однако эти инфраструктуры начинают набирать вес (например, вы можете найти контроллеры или модели с более чем 2000 строками кода, то есть знаменитой моделью User с большим количеством бизнес-логики).
Это способствовало популяризации двух подходов.
Поэтому я бы сказал, что если у вас есть простое приложение, которое в будущем не будет расти с сотнями функций, может быть достаточно простого потока mvc с помощниками. Если ваше приложение планирует значительно расти, вы должны рассмотреть альтернативу, как упоминалось ранее.
Это очень обсуждаемая тема, и есть несколько статей великих программистов, таких как этот от Давида Гейнемейера Ханссона. Также этот это чистое золото из Sandy Metz в railsconf. И другой хороший ресурс этот вопрос.
Других решений пока нет …