J'ai donc créé une couche d'accès aux données via TDD et j'ai abordé une certaine préoccupation. Je préfère ne pas m'engager dans la mauvaise voie, alors j'ai pensé que je vous demanderais de voir si mes pensées étaient conformes à une architecture propre.
Les méthodes de ma couche d'accès aux données (DAL pour faire court) sont assez simples. Ils sont en ligne avec les procédures stockées dans la base de données (aucun autre moyen de l'appeler pour garder les choses propres), et ils contiennent les mêmes paramètres que les procédures. Ils se connectent ensuite à la base de données et renvoient le résultat de la requête. Voici un exemple:
public int DeleteRecord(int recordId)
{
recordId.RequireThat("recordId").NotZeroOrLess();
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId});
return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray());
}
Cela fonctionne parfaitement pour ce type de méthode, car je ne fais rien de significatif avec l'ensemble de résultats. Je veux juste m'assurer que la commande a fonctionné, donc je vais retourner le résultat de la non-requête, qui est juste les lignes affectées, et je peux vérifier la logique en utilisant ce numéro.
Cependant, disons dans une autre méthode DAL, je veux charger un enregistrement. Ma procédure de chargement va être exécutée selects
sur un tas de tables et renvoyer un DataSet
, mais je me demande si mon DAL doit créer les objets métier dans la méthode en utilisant le DataSet
, ou si mes objets métier eux-mêmes devraient simplement avoir une Load()
méthode qui obtient le DataSet
du DAL, puis se remplit essentiellement.
Le faire via le DAL entraînerait moins de logique dans les objets métier (même s'il ne s'agit que d'une logique sélectionnée, c'est toujours de la logique), mais surchargerait un peu le DAL et donnerait l'impression qu'il fait vraiment quelque chose qu'il ne devrait pas '' t faire.
Qu'en pensez-vous?