Как далеко я разбиваю отдельные задачи в рамках типичного сценария «Веб-приложение реагирует на ввод данных пользователем»?
Например, в приведенном ниже случае скажем, сценарий «Пользователь отправляет форму, в результате чего пользовательские данные преобразуются в объект (техническая деталь) и затем сохраняются в базе данных».
Я использую различные сервисы для получения, фильтрации, объектизации и сохранения данных. В частности, например, в моей строке $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
.
Проводка соединяет их вместе.
Я могу «обмануть» и объединить некоторые конструкции кода вместе, чтобы свести к минимуму передачу провода. (минимизируйте передачу параметров везде).
И именно об этом мой вопрос.
Вопрос
Является ли подключение отдельных конструкций кода (передача параметров между различными службами) хорошей идеей? Должен ли я делать больше? Должен ли я делать меньше? Есть ли техника, о которой я не знаю, которая делает это не проблемой?