Então, eu tenho criado uma camada de acesso a dados via TDD e me aproximei de alguma preocupação. Prefiro não seguir o caminho errado, então imaginei pedir a vocês para ver se meus pensamentos estavam alinhados com uma arquitetura limpa.
Os métodos dentro da minha camada de acesso a dados (DAL) são bastante simples. Eles estão alinhados com os procedimentos armazenados no banco de dados (não há outra maneira de entrar nele para manter as coisas limpas) e contêm os mesmos parâmetros que os procedimentos. Eles então se conectam ao banco de dados e retornam o resultado da consulta. Aqui está um exemplo:
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());
}
Isso funciona perfeitamente para esse tipo de método porque não estou fazendo nada significativo com o conjunto de resultados. Eu só quero ter certeza de que o comando funcionou, então retornarei o resultado da não consulta, que é apenas as linhas afetadas, e posso verificar a lógica usando esse número.
No entanto, digamos que em outro método DAL, desejo carregar um registro. Meu procedimento de carregamento será executado selects
em várias tabelas e retornará a DataSet
, mas estou discutindo se meu DAL deve criar os Objetos de Negócios dentro do método usando o DataSet
, ou se meus próprios Objetos de Negócios devem ter apenas um Load()
método que obtenha o DataSet
do DAL e, em seguida, se preenche basicamente.
Fazer isso através do DAL resultaria em menos lógica nos Objetos de Negócios (mesmo sendo apenas lógica de seleção, ainda é lógica), mas aglomeraria o DAL um pouco e faria parecer que realmente está fazendo algo que não deveria ' Não estou fazendo.
O que é que vocês acham?