S>Замечательно. Пусть будет "лишний", "не работает", "васин".
Можно и так разделить.
Только какой толк от такого разделения?
S>Т.е. для каждой строчки кода найдется слой или два, в которой она решает некую задачу. А что если строчка кода решает несколько задач? Кто определяет задачи? Напечатать отчет — это задача или нет?
Задачи определяются целью программы.
Напечатать отчет — конечно это задача — если это входит в назначение программы.
S>Я привел пример. "лишний", "не работает", "васин". Разнесли по модулям с соответствующими именами. Это хорошо спроектированная программа?
Это плохо спроектированная программа.
Так как разделение на модули выполняется по критерию соответствия решаемым задачам, а не каким-то другим критериям (по автору, по полезности).
E>>И от этого мы получаем много плюсов.
S>Каких, например?
Не вижу смысла заниматься плагиатом.
Пару книжек пролистайте по проектированию программ — там все написано.
S>Например, найдется слой, не зависящий от БЛ. Обычно это DAL, но я не знаю, как это устроено в "таком логическом" разделении.
Не согласен.
DAL как раз проектируется так, чтобы выдавать то, что нужно для BLL.
S>Не понимаю, что такое влияние на алгоритмическое поведение.
Алгори́тм (лат. algorithmi — от арабского имени математика Аль-Хорезми[1]) — конечная совокупность точно заданных правил решения произвольного класса задач или набор инструкций, описывающих порядок действий исполнителя для решения некоторой задачи.
Допустим, в каком то слое (пусть это будет DAL) заложен какой-то алгоритм — то есть "...набор инструкций, описывающих порядок действий для решения некоторой задачи ...".
Мы в Бизнес-слое используем этот слой и хотим изменить этот "порядок действий".
Вот это и есть влияние на алгоритмическое поведение.