Всегда проходить бизнес-уровень, чтобы попасть на уровень данных? - PullRequest
2 голосов
/ 26 января 2012

Я настроил свое решение VS с общими уровнями в отдельных проектах: презентация, бизнес, объекты и уровни доступа к данным. У меня есть статический класс AppSettings в DAL, который я хочу вызвать его Load() метод в Application_Start в Globla.asax.cs. Он в основном загружает настройки моего приложения из web.config.

У меня вопрос: должен ли я создать класс бизнес-логики для доступа к нему из моего уровня презентации или я могу получить доступ к своим наборам приложений непосредственно из моего уровня презентации в уровень DataAccess (игнорируя бизнес-уровень).

Если это так, то же самое относится ко всему? Должен ли я всегда проходить бизнес-уровень, чтобы попасть на уровень данных?

public static class AppSettings
{
    public static int ApplicationID { get; set; }
    public static string ServiceEndpoint { get; set; }
    public static string ServiceCode { get; set; }
    public static string ConnectionString { get; set; }

    public static void Load()
    {
        //Connection String
        AppSettings.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["USpace"].ConnectionString;

        //Applicatin Settings
        AppSettings.ApplicationID = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["AppID"]);
        AppSettings.ServiceEndpoint = (string)System.Configuration.ConfigurationManager.AppSettings["ServiceEndpoint"];
        AppSettings.ServiceCode = (string)System.Configuration.ConfigurationManager.AppSettings["ServiceCode"];
    }
}

Если я должен пройти уровень бизнес-логики, класс BLL будет выглядеть следующим образом?:

public static class BLLAppSettings
{
    public static int ApplicationID
    {
        get
        {
            AppSettings.ApplicationID
        }
    }
 ...

Ответы [ 5 ]

3 голосов
/ 26 января 2012

Я бы порекомендовал всегда проходить уровень бизнес-логики для доступа к уровню данных, чтобы все защитные механизмы, встроенные в уровень бизнес-логики, были в игре. Желаете ли вы использовать слой данных без бизнес-уровня?

1 голос
/ 27 января 2012

Вы должны начать с простого, но в разумных пределах. Общие принципы разработки программного обеспечения должны быть вашим руководством при разработке приложения. В этом случае я сразу же подумал, что, имея один глобальный класс AppSettings, вы будете связывать свой бизнес и уровень доступа к данным с этим классом. Сейчас это может показаться разумным, но как быть, когда у вас есть 50 различных настроек, и только 20 из них применяются к уровню доступа к данным? Что если в будущем ваш бизнес-уровень должен загрузить настройки из другого источника, чем DAL? Вдобавок ко всему, в вашем текущем дизайне вы соединяете оба слоя с глобальным синглтоном. Как правило, это не очень хорошая идея.

Даже в небольших приложениях я бы рекомендовал иметь разные объекты настроек для каждого слоя. В моем дизайне это будет похоже на ваш BLLAppSettings. Он инкапсулирует источник настроек, в данном случае это ваш глобальный класс AppSettings. Однако мой дизайн будет отличаться тем, что BLLAppSettings будет конкретным экземпляром интерфейса, определенного на уровне BLL, который должен быть передан на уровень BLL с помощью конструктора, фабрики или внедрения зависимости. Подобный класс, DALAppSettings был бы необходим в моем рекомендованном дизайне.

Таким образом, ваши BLL и DAL не связаны с глобальными наборами приложений, определенными на уровне представления. Детали реализации BLLAppSettings и DALAppSettings могут изменяться независимо при необходимости, но в настоящее время могут оставаться внутренне привязанными к вашему глобальному классу AppSettings.

1 голос
/ 27 января 2012

Если данные находятся в конфигурационном файле приложения (web.config), вам не нужно ничего «проходить», кроме System.ConfigurationManager.AppSettings

1 голос
/ 27 января 2012

Айенде недавно опубликовал несколько статей против этой практики (я так понял):

http://ayende.com/blog/153061/northwind-starter-kit-review-it-is-all-about-the-services

И я согласен с ним: вы должны спросить себя «какова цель этого слоя», и если вы не можете ответить, вы не можете удалить этот слой и сохранить простое программное обеспечение.

Так что, если у вас нет бизнес-операций, когда вы получаете свои данные, работайте напрямую с вашим слоем данных!

1 голос
/ 26 января 2012

Если вы фокусируетесь на шаблонах проектирования, тогда непременно получайте удовольствие, колотя по этим квадратным колышкам в маленьких круглых отверстиях.

Если вы фокусируетесь на дизайне приложений, тогда вы сосредоточитесь на шаблонах проектирования,смысл для вашего Приложения и даже для отдельных частей вашего Приложения.

Знание шаблонов - это знание.Знать, когда, а когда нет, использовать их - это мудрость ...

Это мнение одного человека, но я надеюсь, что оно помогает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...