2009-12-22 11 views
0

Vous ne savez pas s'il existe une réponse "correcte" à cette question, c'est pourquoi je l'ai signalé comme wiki de communauté. Toutes mes excuses pour le long préambule.Table Module/Table Gateway - Où mettre du code pour le chargement des passerelles?

Je construis une application web de taille modeste en .Net et se sont installés sur une architecture à base de table. Ma couche DAL est constituée d'un ensemble de classes TableGateway qui traitent le chargement/l'enregistrement des données dans la base de données - celles-ci renvoient des DataSets fortement typés. La logique d'application est organisée en un ensemble de classes TableModule. Enfin, mes pages ASPX gèrent l'affichage de données et la transmission de valeurs de formulaire, etc. aux TableModules à traiter.

Quelle énigme est qui devrait prendre la responsabilité d'appeler le TableGateway pour obtenir le DataSet, l'ASPX code-behind ou le TableModule?

Exemple 1 - ASPX le fait:

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); 
    } 

Exemple 2 - module de table-t-elle:

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); 
    } 
+0

Je vous remercie de cette question est trival dans le grand schéma des choses, mais il est vraiment me casser les pieds! – rob

Répondre

0

IMHO 2ème variante, car il est simple de diviser les couches logiques comme modèle MVC:

  • page ASPX est vue, ne se traduit par des données et des commandes en provenance et à la représentation des utilisateurs

  • agit module de table comme couche contrôleur

  • TableGateway représente la couche modèle

En seconde variante, vous pouvez modifier le mode d'accès dans la couche de contrôle, en fonction des conditions internes, pas accessible pour le niveau aspx. E.g. décider à partir de laquelle id vraiment charger des données, vérifier les droits d'accès des utilisateurs, etc.