Некоторые люди астронавты архитектуры , и они будут настаивать на том, что все эти слои необходимы, а дизайн - абсолютный мусор, если вы их не включите.
На другом конце спектра находятся люди, которые отодвигают все это в сторону и просто объединяют весь код: это просто, верно, так почему бы просто не разместить SQL-запрос прямо в коде, заполняющем список контроль?
Вы уже определили проблему с версией астронавта, просто слишком сложно выполнять простые задачи.
Проблема второго метода заключается в том, что, хотя он отлично работает для небольших, крошечных приложений, эти же приложения имеют тенденцию превращаться в большие, большие приложения, а затем все разрушается. Вы тратите кучу времени на исправление одних и тех же ошибок снова и снова, потому что один и тот же запрос или фрагмент кода копируются / вставляются по мере необходимости, слегка модифицируются и распространяются повсеместно.
Есть, конечно, золотая середина. Где именно эта ложь будет отличаться в зависимости от того, кого вы спрашиваете ... но это там.
Создание нормального бизнес-уровня - хороший шаг к достижению этой цели. Это должен быть слой, который представляет простейшее представление объектов в вашей системе и не содержит общедоступных объектов, связанных с базой данных (кроме, возможно, объекта Connection, который сообщает бизнес-уровню, как добраться до базы данных). Это объединяет всю вашу логику в одном месте, поэтому ASP-часть проекта просто подключит абстрактный метод «User.LoadAll ()» к таблице, в которой отображается список пользователей. Приложение ASP не должно иметь ни малейшего понятия, читает ли оно из базы данных, веб-службы или просто кучу готовых вещей ... оно просто взаимодействует с бизнес-уровнем.
На бизнес-уровне у вас могут быть запросы напрямую, вы можете использовать ORM, вы можете создать более глубокий уровень доступа к данным, который выполняет эти вещи ... хорошо, что это решение целиком содержится на бизнес-уровне (и вы можете измените его позже, если это необходимо, не затрагивая общедоступный API бизнес-уровня).
Теперь любые запросы, касающиеся пользователей, содержатся в объекте User ... и, если у вас есть ошибка в способе загрузки разрешений, ее можно исправить в одном месте.
Я только что выполнил миграцию, как я описал выше (ASP с SQL в выделенном коде, на отдельный уровень представления - бизнес - источник данных (ORM)), и это здорово. Хотя это добавляет несколько уровней для получения реальной информации, как только бизнес-методы работают, остальная часть кода работает. Исправить ошибку просто, и исправляет ее везде. Ближе к концу это быстро привело к тому, что, когда вам нужно было получить список отчетов, которые может запустить пользователь, кто-то уже написал для этого бизнес-метод (User.GetReports ()), где раньше вы, вероятно, никогда найдите его, если это было сделано - если вам повезло, он был написан как функция, а не просто встроенный код.