При использовании SOC & amp; SRP Должен ли я беспокоиться о слишком большой передаче параметров между блоками кода?

Как далеко я разбиваю отдельные задачи в типичном сценарии «Веб-приложение реагирует на ввод пользователя»?

Например, в приведенном ниже случае, скажем, сценарий «Пользователь отправляет форму, в результате чего пользовательские данные превращаются в объект (технические данные), а затем сохраняются в базе данных».

Я использую различные сервисы для получения, фильтрации, сохранения объектов и сохранения данных. Конкретно, например, по моему $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,

Проводка соединяет их вместе.

Я могу «обмануть» и объединить некоторые конструкции кода, чтобы свести к минимуму передачу. (минимизируйте передачу параметров везде).

И вот о чем мой вопрос.

Вопрос

Является ли полезной разводка отдельных конструкций кода (передача параметров между различными службами)? Должен ли я сделать больше? Должен ли я делать меньше? Есть ли техника, о которой я не знаю, которая делает это не проблемой?

0

Решение

Я бы сказал, что это зависит от бизнес-логики и области проблемы, которую вы пытаетесь решить. Если вы видите такие фреймворки, как Ruby On Rails или Laravel, они пытаются использовать MVC для решения типичных проблем веб-приложений. Однако эти инфраструктуры начинают набирать вес (например, вы можете найти контроллеры или модели с более чем 2000 строками кода, то есть знаменитой моделью User с большим количеством бизнес-логики).

Это способствовало популяризации двух подходов.

  1. Использование микросервисов в различных технологиях вместо монолитных приложений.
  2. Использование таких ООП-понятий, как проблемы (черты в PHP), композиция, миксины для поведения, движки для расщепления логики и многое другое.

Поэтому я бы сказал, что если у вас есть простое приложение, которое в будущем не будет расти с сотнями функций, может быть достаточно простого потока mvc с помощниками. Если ваше приложение планирует значительно расти, вы должны рассмотреть альтернативу, как упоминалось ранее.

Это очень обсуждаемая тема, и есть несколько статей великих программистов, таких как этот от Давида Гейнемейера Ханссона. Также этот это чистое золото из Sandy Metz в railsconf. И другой хороший ресурс этот вопрос.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]