В какой раздел я должен поместить свой код SqlDataReader?
-
05-07-2019 - |
Вопрос
Я довольно новичок в c # и пытаюсь написать n-уровневое веб-приложение. Чтобы убедиться, что я разместил логику и код в нужном месте, у меня просто вопрос о том, куда поместить мой код.
У меня есть три основных раздела:
<Ол>Код DataAccess - внутри папки с именем " BusinessLogic " в моей папке App_Code.
Код бизнес-логики - внутри папки с именем " DataAccess " в моей папке App_Code.
Уровень представления - все пользовательские интерфейсы
Если, например, мне нужно написать SqlDataReader для извлечения записей из моей базы данных, где я мог бы физически написать код? В BLL или DAL?
IE с уровня представления я вызываю код BLL.
ContentBLL content = new ContentBLL();
//some code to call the BLL layer...
Здесь я начинаю путаться. На уровне логики бизнес-уровня, который я вызываю, я пишу здесь код SqlDataReader или создаю еще один шаг и пишу код SQlDataReader на уровне доступа к данным.
IE В BLL я должен добавить метод, который называется DAL? Например
public static ContentBLL GetPageContent(intID)
{
return ContentDAL.GetItem(ID)
}
а затем в моем DAL у меня есть метод для выполнения фактического SqlDataReader Например
public static ContentBLL GetItem(int id)
{
//return the SqlDataReader code...
}
Я пытался извлечь уроки из учебных пособий на веб-сайте asp.net, однако для DAL в учебном пособии вместо них используются наборы данных. Любая помощь будет принята с благодарностью.
Решение
Мой типичный подход - это то, что я в шутку называю 2.5-уровневым методом.
В этом методе я использую следующий подход:
Presentation Layer
Businesss Object Layer / Data Serialization
Database Service Layer
Каждый бизнес-объект на бизнес-уровне имеет конструктор, который принимает IDataReader. Этот читатель затем читается для заполнения объекта.
Уровень базы данных оборачивает все запросы на доступ к БД и возвращает читателей.
Хотя это не так чисто, как хотелось бы некоторым людям, альтернативой является создание тупых контейнерных классов для распределения данных между уровнями, и я предпочитаю просто использовать IDataReader.
Кроме того, используя IDataReader, а не SqlDataReader, я все еще слабо связан с моим DAL и могу реализовать любую форму персистентности, не только SQLServer.
Другие советы
Это звучит для меня как классический случай чрезмерной инженерии.
Я не буду спорить с тем фактом, что на этапе обучения требуется небольшая чрезмерная инженерия, но я думаю, что если в какой-то момент это вызовет больше путаницы, вам придется отступить и пересмотреть свой подход.
Постарайтесь узнать немного больше о ASP.NET и не переживайте из-за семантики. Если вы будете непредвзяты и разрешите рефакторинг своего кода, вы, скорее всего, сможете сами дать ответ на свой вопрос.