Pergunta

É má prática para escrever uma biblioteca que define uma interface dependente de outra biblioteca?

Eu sei acoplamento forte é ruim, mas que isso ainda se aplicam quando usando classes .NET?

Por exemplo, em .NET, se eu tiver uma biblioteca que retorna um objeto de cor, seria forçar uma dependência em System.Drawing em qualquer coisa que usa a minha biblioteca. Eu seria melhor criar minha própria classe Color-tipo dentro da minha biblioteca?

Foi útil?

Solução

Eu distinguir entre volátil e Dependências estáveis ??.

Em geral, os olhares cor como um estábulo Dependência porque já está na BCL, é determinista na natureza e não envolve qualquer out-of comunicação processo intensivo de recursos, e também não dependem de um determinado set-up de seu ambiente de tempo de execução.

A única consideração aqui é que quando se trata de cores, há mais de um tal classe na BCL, para se certificar de que você realmente quer dizer para alvejar apenas aplicações Windows Forms com sua API, porque WPF tem a sua própria definição de Cor.

Se você só precisa a cor para pintar partes do UI em uma determinada cor, em seguida, o built-in class cor é provavelmente bem, mas se cor é um conceito principal em seu modelo de domínio, e você precisa para atingir diferentes UIs (WPF, Windows Forms, web), você provavelmente seria melhor, definindo sua própria abstração.

Em tal um caso mais avançado, você poderia, posteriormente, criar adaptadores e cartógrafos em torno de sua abstração para preencher a lacuna entre a abstração eo concreto classes de cor.

Outras dicas

Se for uma biblioteca padrão .NET, eu não se preocupar com isso. Não há razão para mapear a partir de uma classe para outra ... e se System.Color mudou na próxima versão .NET? Você teria que mudar o seu código de mapeamento também, e, eventualmente, ter de detectar a versão e mapear adequadamente. Isso é uma dor real.

Com todas as minhas bibliotecas, eu retorno objetos que dependem apenas coisas na biblioteca.

Eu me perguntava por que eu estava escrevendo uma biblioteca que iria depender de outro namespace que não estava implícita. Parece ir contra o conceito inteiro "encapsulamento".

Assim, apenas por ir fora do meu próprio raciocínio e conhecimento do OOP, eu diria que você está no caminho certo com o retorno seu próprio objeto não-dependente.

Você representar uma excelente pergunta. A resposta é: depende. No caso de bibliotecas padrão que estarão sempre disponíveis, então é bom; as referências de biblioteca núcleo diferentes .dlls o tempo todo.

No caso de uma biblioteca de terceiros que você executar em problemas. Nem sempre é uma boa idéia para rolar o seu próprio se alguma coisa faz o que quiser, mas então você tem uma dependência em outra biblioteca, que é um problema logístico para os usuários.

Não há resposta aqui, você só tem que ir com o que faz mais sentido para o seu projeto. Tente separar, tanto quanto possível, sim, mas às vezes você só tem que cuidar-se e começar o trabalho feito.

Ele depende do seu uso da classe.

Se você precisar obter uma instância do sistema de classes a cores a partir de uma instância de sua classe a cores (por exemplo, se você desenhar para um Windows Form), então seria melhor usar a classe System - ele poupa o esforço de ter de converter entre os dois tipos e dá-lhe a vantagem de ser capaz de usar todas as "características" da classe Cor de graça (como construído em constantes para "vermelho", "Black", "Green" etc .. .

Se por outro lado você está simplesmente trabalhando com valores RGB arbitrárias (talvez para cálculos científicos) e não necessidade de converter a uma instância do System.Color, então pode fazer sentido para criar o seu própria classe.

Em toda a probabilidade que você é melhor fora de usar a classe System.Color - sim encapsulamento e tudo o que é uma boa idéia, no entanto, não à custa de poupando-lhe enormes quantidades de tempo

!

Você não deve se preocupar com qualquer coisa na biblioteca central .NET. Você não iria muito longe em escrever um DLL sem ele. O único lugar, possivelmente, ter cuidado em torno dela é o namespace System.Web como eu acredito .NET 4 tem um instalador de perfil de cliente que basicamente significa que se você usar este instalador só irá instalar coisas esperado para ser usado em um cliente. Eu, pessoalmente, acho que é uma má ideia por parte da Microsoft, uma vez que apenas acrescenta complicação un-necessário para salvar uma pequena quantidade de tempo de download.

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