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

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);
  1. Como posso fazer isso? Isto é mesmo possível?

  2. Se sim para (1), é uma boa prática?

  3. Se sim para (1) e (2) faz isso simplifica ou projeto complicar?

Agradecemos antecipadamente.

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top