Table Module / Table Gateway - Где разместить код для загрузки со шлюзов? - PullRequest
0 голосов
/ 22 декабря 2009

Не уверен, что есть «правильный» ответ на этот вопрос, поэтому я пометил его как вики сообщества. Извиняюсь за длинный преамбул.

Я создаю веб-приложение небольшого размера в .Net и остановился на архитектуре на основе таблиц. Мой уровень DAL состоит из набора классов TableGateway, которые обрабатывают загрузку / сохранение данных в базу данных - они возвращают строго типизированные наборы данных. Логика приложения организована в набор классов TableModule. Наконец, мои ASPX-страницы обрабатывают отображение материала и передачу значений формы и т. Д. В TableModules, над которыми нужно поработать.

Что меня озадачивает, кто должен нести ответственность за вызов TableGateway, чтобы получить DataSet, кодовый компонент ASPX или TableModule? Пример 1 - ASPX делает это:

SomePage.aspx.cs:

    protected void AddLink_Click(object sender, EventArgs args)
    {
        long id = long.Parse(PopulationDropDown.SelectedValue);
        string someProperty = SomePropertyTextBox.Text;

        IPopulationGateway populationGateway = DALServicesLocator.GetPopulationGateway();
        PopulationDataSet populationData = populationGateway.LoadPopulationDetails(id);

        PopulationModule.SomeLogicToAddStuff(populationData, id, someProperty);

        populationGateway.Save(populationData);
    }

Пример 2 - TableModule делает это:

SomePage.aspx.cs:

    protected void AddLink_Click(object sender, EventArgs args)
    {
        long id = long.Parse(PopulationDropDown.SelectedValue);
        string someProperty = SomePropertyTextBox.Text;

        // Just pass values to the TableModule and let it talk to the Gateway.
        PopulationModule.SomeLogicToAddStuff(id, someProperty);
    }

1 Ответ

0 голосов
/ 23 декабря 2009

ИМХО 2-й вариант, потому что просто разделить логические слои как модель MVC:

  • Страница aspx - Просмотр, только переводит данные и команды из и в пользовательское представление

  • TableModule действует как слой контроллера

  • TableGateway представляет слой модели

Во втором варианте вы можете изменить режим доступа на уровне управления на основе внутренних условий, недоступных для уровня aspx. Например. решить, из какого id действительно загружаются данные, проверить права доступа пользователя и т. д.

...