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