Все нижесказанное – про техзвенку, однако в равной степени может быть применено к: архитектуре, модели, паттернам, технологиям... Итак.
Поскольку вопросы про трехзвенку появляются в форумах с завидной регулярностью, складывается впечатление, что очень многие наслышаны об ее чудодейственных свойствах и общем благотворном влиянии на разрабатываемый проект. В праведном желании узнать про трехзвенку как можно больше, эти многие сеют на полях форума вопросы, в которых, как правило, присутствует вопрос «как», и напрочь отсутствует вопрос «зачем». Второй же вопрос, на мой взгляд, представляется куда более сложным и важным, и мне непонятно – почему человек отвечает на него самостоятельно, и только затем идет на форум задавать второй.
Почему я считаю, что человек ответил на вопрос «зачем» скорее неверно, чем верно? То есть, почему использование терхзвенки в данном случае неоправданно? Причин две. Первая – поскольку человек не очень представляет, что такое трехзвенка (что вытекает из вопроса «как»), то скорее всего он ответил на вопрос «зачем» опираясь на чьи-то слова «Терхзвенка – это круто!» и прочих слухах. Вторая причина – человеку, не знающему «как» терхзвенку, скорее всего, поручили не очень сложный (большой) проект, необходимость терхзвенки в котором сомнительна.
На мой взгляд, классическая терхзвенка DB<-DataAccess<-Business<-UI вредна в:
большинстве web-проектов (за исключением очень крупных порталов с посещаемостью выше 10 тысяч в день и необходимостью в сложных и длительных процессах обработки данных)
во всех проектах, представляющих собой всего лишь интерфейс R/W к табличкам в базе данных. (Тем более если это веб проект – есть риск выполнять кучу лишних операций связанных с тем, что бизнес-объекты хранят свое состояние, а веб-программирование не располагает к хранению состояний объектов. Сделать это конечно можно, но придется затратить дополнительные усилия и породить дополнительное количество лишнего кода.)
В этих случаях лишние звенья способны только замедлить разработку и полностью запутать код, чем сделать затруднительным дальнейшее сопровождение и развитие. Такие проекты имеют тенденцию периодически переписываться с нуля.
Так в каких же случаях терхзвенка необходима? Я вижу следующие:
неопределенная четко изначально, но предполагаемая очень большая нагрузка на систему (здесь может помочь масштабируемость данной архитектуры)
необходима очень высокая устойчивость к сбоям (используя кластеры можно реализовать избыточность системы, и сбои в одном звене не выведут систему из строя)
очень сложные бизнес-процессы (если система должна выполнять операции, обрабатывающие большое количество информации и требующие большое количество времени – надежнее выполнять такие операции в выделенном бизнес-процессе)
очень жесткие требования к безопасности, когда некоторые данные, требуемые для выполнения некоторых операций не должны покидать сервер.
Заметьте, в каждом пункте есть слово
очень.
Если ваша система удовлетворяет всем этим требованиям – смело берите трехзвенку на вооружение.
Если же вы не очень представляете, зачем оно вам нужно – подумайте, что для вас важнее: качественный и вовремя законченный проект или желание узнать «как».