Como você faz um método de seleção genérico para o seu DAL?
-
11-07-2019 - |
Pergunta
Cenário
Você tem uma Assembleia para transferência de dados objetos contendo 10 classes que exatamente representam 10 tabelas em seu banco de dados. Você gera / construir uma camada DAL que tem métodos como -
DTOForTable1[] GetDataFromTable1();
DTOForTable2[] GetDataFromTable2();
e assim por diante ....
Pergunta ??strong>
Como posso fazer um método que esconde os vários métodos para obter dados de cada tabela do código de cliente? O método que eu gostaria, por exemplo, em serviço ou camada de negócios poderia ser semelhante -
SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
-
Como posso fazer isso? Isto é mesmo possível?
-
Se sim para (1), é uma boa prática?
-
Se sim para (1) e (2) faz isso simplifica ou projeto complicar?
Agradecemos antecipadamente.
Solução
Você poderia defini-lo como:
T[] GetDataFromTable1<T>() where T:IDto
{
// you can know the table with the type of T
}
Dito isso, eu preferiria quer ter os diferentes métodos ou até mesmo aulas para trabalhar com ele. Eu uso o padrão de repositório em vez disso, sugiro que procurar informações sobre ele.
Outras dicas
Aqui está como o meu DAL faz isso:
List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());
Para executar junta-se:
List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));
A classe DTO si determina qual tabela para acesso e suas propriedades determinar quais colunas para recuperar.
Eu não posso responder se é uma melhor ou boa prática. É a prática que tem vindo a trabalhar para mim por um longo tempo. Não há métodos estranhos como "GetById", "GetAll", etc.
É muito comum nestes dias para implementar suas classes de mesa de concreto como herdar uma classe de tabela de acesso abstrato. A classe abstrata tem métodos genéricos para consultar uma tabela. Cada classe concreta pode declarar que tabela de banco correspondente (também, talvez, colunas e relações inter-tabela).
Os padrões de design que ajuda incluem ActiveRecord e Table Data gateway .