Desenvolvimento - WCF/WPF
Hierarquia de Contratos no WCF
A Hierarquia de contratos não tem muito segredo a vantagem de fazer isso é ter uma maior flexibilidade na hora de criar serviços. Conforme eu disse anteriormente e sem dúvidas nenhuma você está criando uma maior abstração para o seu negócio.
por Deivid Roger Oliveira SantosComo produzir contratos em WCF?
Essa pergunta pode ter sido de forma errada certo? Você poderia simplesmente responder que sempre de costume cria uma nova interface no WCF e decora com o atributo ServiceContract e os seus membros com OperationContract, tudo muito simples e pronto a partir daí o meu serviço começa a ser construído. Só que a partir daí surge uma nova pergunta - "Se estamos construindo serviços baseados no conceito de reutilização, porque então não criamos reutilização dentro do nosso próprio serviço?" - Legal as coisas começam a ficar mais interessante.
Suponha que estejamos criando dois serviços gato e cachorro, se analisarmos as operações em comum dos dois serviços teríamos os seguintes resultados: Comer, Andar, Pular indo um pouco mais longe no mundo real os animais podem ser vacinados, tosados e medicados e mais tarde essas ações também acabam virando operações dentro da nossa abstração. As únicas operações diferentes entre gato e cachorro é que gatos miam e cachorros latem, até ai sem nenhum segredo.
Durante a modelagem do serviço as operações em comum podem ser implementadas em contratos diferentes e assim criar hierarquia de contratos, a vantagem de fazer isso é que depois podemos implementar os contratos juntos ou separadamente dentro de um nível mais alto ou baixo de abstração. Note no exemplo abaixo o contrato ICachorro e IGato:
[ServiceContract]
public interface ICachorro:IAnimal,IVeterinario
{
[OperationContract]
void Latir();
}
[ServiceContract]
public interface IGato: IAnimal,IVeterinario
{
[OperationContract]
void Miar();
}
No exemplo note que os contratos ficaram relativamente simples, o que foi feito separar as operações em comum em outros contratos criando uma maior abstração. Veja a definição dos outros contratos:
[ServiceContract]
public interface IAnimal
{
[OperationContract]
void Comer();
[OperationContract]
void Andar();
[OperationContract]
void Pular();
}
[ServiceContract]
public interface IVeterinario
{
[OperationContract]
void Vacinar(bool vacinar);
[OperationContract]
void Tosar(bool tosar);
[OperationContract]
void Medicar();
}
Observe agora um detalhe importante é que na hora de implementar o contrato no serviço basta indicar o seu contrato base, conforme segue o exemplo abaixo da classe cachorro, note que as operações do contrato IAnimal e IVeterinario foram implementadas automaticamente.
public class Cachorro:ICachorro
{
#region ICachorro Members
public void Latir()
{
throw new NotImplementedException();
}
#endregion
#region IAnimal Members
public void Comer()
{
throw new NotImplementedException();
}
public void Andar()
{
throw new NotImplementedException();
}
public void Pular()
{
throw new NotImplementedException();
}
#endregion
#region IVeterinario Members
public void Vacinar(bool vacinar)
{
throw new NotImplementedException();
}
public void Tosar(bool tosar)
{
throw new NotImplementedException();
}
public void Medicar()
{
throw new NotImplementedException();
}
#endregion
}
Com isso quando definir o contrato do serviço cachorro no arquivo de configuração basta apontar o contrato ICachorro, pois este contrato já implementa por hierarquia o contrato IAnimal e IVeterinario e que por sua vez ira expor ao cliente as suas operações.
A Hierarquia de contratos não tem muito segredo a vantagem de fazer isso é ter uma maior flexibilidade na hora de criar serviços. Conforme eu disse anteriormente e sem dúvidas nenhuma você está criando uma maior abstração para o seu negócio.