Вздох.
Широкое согласие будет отрицательным; бизнес-уровень и контроллер / веб-уровень должны поддерживаться по-разному, потому что они являются отдельными проблемами.
Дело в том, что вы, кажется, обозначаете это как вопрос «чистота против реальности», который невероятно близорук и слегка неприятен. Это также не поддается постановке вопроса; если вы не собираетесь рассматривать представленные мнения, то зачем их запрашивать?
Это правда, что выделение вещей чуть более аккуратно, требует больше предварительных усилий, больше времени и в конечном итоге может стоить немного больше. Это также правда, что вы не сможете ощутить какую-либо непосредственную выгоду от этого. Тем не менее, множество всхлипывающих историй, которыми в течение нескольких десятилетий делилось огромное количество программистов, позволяет предположить, что, по возможности, ваша так называемая «чистота» уменьшает боль, когда пять лет спустя; Гоша; вам действительно нужно собраться с силами и сделать небольшой рефакторинг, и это не очень приятно из-за всех трещин, через которые просачиваются ваши обязанности.
Несколько лучшим способом представления уровней для веб-приложения может быть рассмотрение представления, взаимодействия, бизнес-правил и данных; сверху вниз. Ваши данные - это база данных, доступ к данным и т. Д., А бизнес-правила налагают любые дополнительные ограничения на эти данные, обрабатывают оценку, вычисления и т. Д. Затем происходит взаимодействие между уровнем представления (который в основном является вашим пользовательским интерфейсом) и бизнес-логикой, выполнение сценариев использования вашего приложения.
До этого момента пользовательский интерфейс не имеет значения; не имеет значения, вводит ли пользователь, скажем, данные клиента в приложении командной строки или перемещается по какой-либо многостраничной веб-форме с данными, сохраненными в сеансе. Допустим, вы выбрали последнее; наклейте веб-интерфейс на него. Теперь вас интересует написание относительно простого кода для извлечения запрошенных данных и их представления пользователю. Дело в том, ваше веб-приложение; интерфейс , что - это весь ваш пользовательский интерфейс; сеансы и все. Только в тот момент, когда вы готовы сказать: «Эй, давайте вставим эти данные о клиентах в базу данных», вы переходите и вызываете эти очень любезно созданные сервисные уровни, передавая каждый бит информации, которую получает ваше веб-приложение. припрятал; пользовательский ввод, имя пользователя, вносящего изменения; все это дерьмо. И ваш уровень обслуживания справляется с этим. Или, наоборот, суки, потому что вы забыли обязательное поле.
Поскольку вы четко отделили вещи, кишки вашего приложения, как и другие предлагали, могут быть перемоделированы (или «заимствованы») для использования в любом другом приложении, а уровень обслуживания остается без сохранения состояния, чистым и готов справиться с вещами. И это делает вашу проверку, и поэтому ваша проверка везде одинакова. Но он не знает, кто вошел в веб-интерфейс, или консольное приложение, или причудливое клиентское приложение, работающее на терминале, и ему все равно, потому что эти детали важны только для этих приложений.
Нужно добавить новое правило проверки? Нет проблем; заставить уровень обслуживания выполнять валидацию и обрабатывать проблемы пользовательского интерфейса по мере необходимости выше в цепочке. Нужно изменить способ расчета? Измените это на бизнес-уровне. Больше ничего не должно быть затронуто.