Table Module/Table Gateway — Где разместить код для загрузки из шлюзов?

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

Я создаю веб-приложение скромного размера в .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);
    }

person Community    schedule 22.12.2009    source источник
comment
Я понимаю, что это тривиальная проблема по большому счету, но она меня действительно беспокоит!   -  person rob    schedule 22.12.2009


Ответы (1)


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

  • страница aspx - это вид, только переводит данные и команды из пользовательского представления и в него.

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

  • TableGateway представляет уровень модели

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

person Community    schedule 23.12.2009