В какой раздел я должен поместить свой код SqlDataReader?

StackOverflow https://stackoverflow.com/questions/827401

  •  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 и не переживайте из-за семантики. Если вы будете непредвзяты и разрешите рефакторинг своего кода, вы, скорее всего, сможете сами дать ответ на свой вопрос.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top