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