====== Interfaces Fábrica ====== Em teoria o primeiro módulo a ser desenvolvido é aquele que vai dar base para toda a aplicação, as Interfaces Genéricas. {{ :pres:gerti:solution_crud_fabrica_generica.png?nolink&direct | Interfaces Genéricas}} **Dto's (Data Transfer Object)** : Abstrai os dados necessários na camada de usuário. A figura a seguir apresenta o exemplo de um Dto. O objeto é a representação de uma Ordem de Serviço (OS). {{ :pres:gerti:processos_de_ti:solution_crud_fabrica_generica_dto.png?direct |}} Todo Dto deve herdar a classe //DtoPadrao// do TCE Compartilhado, sua contribuição é um atributo //Id// e por padrão a assinatura da classe. Atente-se, seus atributos são um reflexo das informações pertinentes a necessidade do usuário (//para melhor compreensão comparar com Objeto de negocio do Serviço//). **IServico** : Interface de contrato para uso dos serviços pelas camadas UI(//Using Interface//). Aqui são Especificados as funções das tarefas que se espera realizar por cada tipo de serviço. {{ :pres:gerti:processos_de_ti:solution_crud_fabrica_generica_iservico.png?direct |}} A interface de cada serviço deve herdar obrigatoriamente a interface //IServicoPadrao// que deve ser tipada com a assinatura do Dto da classe ao qual o serviço corresponde. Essa pratica permite os objetos instanciados pela interface IServicoDeOrdem, por contrato acessarem as funções descriminadas pela interface IServicoPadrao e implementadas na classe que implementa a intrface IServicoDeOrdem. Veja na figura a seguir a estrutura da interface IServicoPadrao. {{ :pres:gerti:processos_de_ti:solution_crud_fabrica_generica_iservicopadrao.png?direct |}} Semelhante a interface //IServicoPadrao// porem sem a obrigatoriedade a interface //IServicoPadraoPersistencia// também pode ser herdada pela interface de serviço. Veja na figura a seguir as funções ao quais a interface //IServicoPadraoPersistencia// oferece no contrato da interface IServicoDeOrdem. {{ :pres:gerti:processos_de_ti:solution_crud_fabrica_generica_iservicopersistencia.png?direct |}} Perceba, a interface IServicoDeOrdem não possui funções especificas, em decorrência da simplicidade da aplicação, se alguma funcionalidade especifica de uma OS fosse tratada então ela estaria descriminada como um funções na interface IServicoDeOrdem. Outro detalhe é que mesmo sem função especificas na interface a classe que implementa-la terá obrigatoriamente que implementar as funções herdadas das interfaces padrão.