Не уверен, что есть «правильный» ответ на этот вопрос, поэтому я пометил его как вики сообщества. Извиняюсь за длинный преамбул.
Я создаю веб-приложение небольшого размера в .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);
}