Como lidar com a funcionalidade da biblioteca interna no Dart
Pergunta
Provavelmente estou complicando isso.Mas tenho uma biblioteca que estou fazendo.Terá 2 partes, a externa “qualquer um pode brincar com essas” coisas e a interna.É minha intenção que as coisas internas permaneçam relativamente expostas para tentar manter a interface limpa e fácil de raciocinar.Então aqui está o que estou fazendo (diga-me se isso é loucura ou não).
Para coisas externas, tenho a biblioteca, e depois tudo que deveria ser exposto como “parte” dessa biblioteca.Para as coisas internas, tenho uma biblioteca "my_library_internal" separada que possui todas as suas classes como parte da classe da biblioteca interna.
Onde as coisas ficam estranhas.A biblioteca interna importa a biblioteca externa para todos os métodos da biblioteca interna para usar objetos da biblioteca externa.Isso eventualmente resulta em avisos do compilador (embora pareça compilar perfeitamente).
Essa é a maneira idiomática de fazer isso ou devo apenas tornar tudo o que trata dessa biblioteca, interna ou externa, parte dela e não me preocupar em expor demais as entranhas.
Solução
Como está escrito no Conceitos importantes página da documentação do Dart, a forma como funciona é esta:
- Ao contrário do Java, o Dart não possui palavras-chave
public
,protected
, eprivate
.Se um identificador começar com um sublinhado (_), ele será privado de sua biblioteca.Para obter detalhes, consulte a seção chamada “Bibliotecas e Visibilidade”.
Portanto, coloque seus tipos internos na mesma biblioteca que os tipos públicos e prefixe-os com um sublinhado _
.
Outras dicas
Isso parece perfeitamente bem, e não deve nem precisar causar advertências.
Se você tiver apenas uma biblioteca, poderá usar membros privados da biblioteca e colocá-los todos na mesma biblioteca (var _private = foo;
), mas se você tiver mais de uma biblioteca exposta que compartilham a funcionalidade "privada", tendo um "oculto" compartilhadoA biblioteca é a maneira mais simples de fazê-lo.
Você não pode realmente esconder a biblioteca escondida compartilhada - se alguém quiser importá-lo, eles podem, mas, provavelmente, eles provavelmente podem fazer muito mais dano usando DART: espelhos, se é isso quequer.