Así que he estado creando una capa de acceso a datos a través de TDD y me he acercado a una preocupación. Prefiero no comenzar por el camino equivocado, así que pensé en pedirles que vean si mis pensamientos están en línea con una arquitectura limpia.
Los métodos dentro de mi capa de acceso a datos (DAL para abreviar) son bastante simples. Están en línea con los procedimientos almacenados en la base de datos (no hay otra forma de invocarla para mantener las cosas limpias) y contienen los mismos parámetros que los procedimientos. Luego simplemente se conectan a la base de datos y devuelven el resultado de la consulta. Aquí hay un ejemplo:
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());
}
Esto funciona perfectamente para este tipo de método porque no estoy haciendo nada significativo con el conjunto de resultados. Solo quiero asegurarme de que el comando funcionó, por lo que devolveré el resultado de la no consulta, que son solo las filas afectadas, y puedo verificar la lógica usando ese número.
Sin embargo, digamos en otro método DAL, quiero cargar un registro. Mi procedimiento de carga se ejecutará selects
en un montón de tablas y devolverá un DataSet
, pero estoy luchando con si mi DAL debería crear los Business Objects dentro del método usando el DataSet
, o si mis Business Objects deberían tener un Load()
método que obtenga el DataSet
desde el DAL, y luego básicamente se completa.
Hacerlo a través del DAL resultaría en menos lógica en los Business Objects (aunque esto es solo lógica selecta, sigue siendo lógica), pero saturaría un poco el DAL y haría sentir que realmente está haciendo algo que no debería ' No estaré haciendo.
¿Qué piensan ustedes?