Pergunta

Eu estou codificação de um quadro (em Java, mas pergunta é genérico) em que irá fornecer um conjunto de interfaces para os clientes a implementar. As funções no quadro vão depender de como as classes de implementação será constructued, isto é, thay dependem essas implementações para fornecer outras instâncias de interfaces.

Por exemplo, eu poderia ter:

Interface IContribution {
   public IMyStuff getMyStuff();
   public IHelper getHelper();
}

Interface IMyStuff {
     public void doSomeMethod(IHelper helper);
}

Como posso ter certeza de que essas instâncias de IMyStuff e IHelper estão disponíveis?

Um método seria para criar os métodos 'getter' na interface e no meu quadro meticulosamente verificar nulo objetos retornados.

Outra opção seria criar classes abstratas que implementam uma fábrica que as chamadas (usando um padrão de estratégia) os métodos de interface a ser implementado. Mas isso desafia o fato de que eu tenho a interface em primeiro lugar. Os clientes devem, em seguida, usar a classe abstrata. Mas eles poderia contornar isso usando a interface em vez da classe abstrata. Portanto, não deve fornecer a interface mas apenas a classe abstrata ...

Então, quais são as suas ideias sobre isso, o que é uma abordagem pragmática para isso?

Foi útil?

Solução

Como posso ter certeza de que essas instâncias de IMyStuff e IHelper estão disponíveis?

Se os clientes são responsáveis ??por implementar as interfaces e classes si, eu diria que é a sua responsabilidade para garantir que essas instâncias estão disponíveis -. Eu não diria respeito a mim mesmo com colocá-lo em meu próprio código

Outras dicas

A fim de construir um bom quadro, você precisa ser simultaneamente construção de uma aplicação em torno dele. Dessa forma, você vai conhecer e compreender a dor seus clientes irão suportar antes que seja imposta sobre eles.

Em outras palavras, começar com: Como meus clientes iria trabalhar com esta aplicação? Como é que eles precisam para trabalhar com ele?

Você vai imediatamente perceber que a maneira mais simples, a partir de sua perspectiva, vai ser melhor.

Você não pode garantir que com Interfaces sozinho, nenhum comportamento lá.

Eu concordo com a filosofia de programação defensiva no Framework, ajuda os desenvolvedores evitar cometer erros.

Você pode fornecer um objeto de fábrica:

public class MyPoliceman {
    public IContribution makeContributor( IMyStuff stuffer, IHelper helper)
                    throws BadAssociatesException {

     // check validity of stuffer and helper here, throw exceptions if null
    }
}

Em seguida, pelo menos, podemos verificar se há valores nulos etc.

Com alguns pensaram que normalmente é possível dar a desenvolvedores de ajuda. Em alguns casos, o melhor que você pode fazer é para interceptar erros e relatá-los craefully. Por exemplo, aqui, um perfeitamente bem IHelper poderia ser passado para a sua fábrica, mas as ações posteriores sobre a classe poderia torná-lo incapaz. (Ex. Imagem que era um arquivo, e um efeito colateral depois fechou o arquivo.) Então tudo que você pode fazer é prender a condição de erro resultante, gravar um lugar erro e (provavelmente) lançar uma exceção. Então, pelo menos, o desenvolvedor tem uma pista sobre o que consertar.

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