Por que tantos programas usam configurações de estilo “foo.bar.baz = qux”?

3

Tenho notado que muitos programas armazenam informações de configuração em várias chaves hierárquicas. Por exemplo, o about:config do Firefox tem chaves como network.http.pipelining e network.http.pipelining.ssl e network.http.use-cache . Percebi esse estilo de configuração no Firefox, no OS X ( Library/Preferences ), no sysctl , entre outros. Por que isso é tão comum? Houve algum programa inicial que usou, então outros copiaram?

    
por cpast 19.02.2013 / 00:06

2 respostas

5

Essa convenção hierárquica existe para fornecer clareza, ajudando-nos a conhecer o escopo de influência de cada configuração e a diferenciar várias configurações com um nome idêntico ou ambíguo entre vários módulos.

Isso é útil em aplicativos com muitas configurações possíveis para incluir no usuário principal páginas de opções (onde a hierarquia é mostrada por guias ou páginas) e uma boa alternativa à planilha INI files (com [title] delimitadores de seção) que são mais propensos a erros do usuário e geralmente exigem um reinicialização do aplicativo para entrar em vigor.

As configurações hierárquicas também podem refletir, até certo ponto, o modelo interno orientado a objetos usado pelos desenvolvedores:

Nestemodelodeexemplo,podemosimaginarumaconfiguraçãodepessoa.professor.disallow_strikes=true,enquantoumstudents.disallow_strikespodepermanecercomofalsoounãoestardisponível.Essacompartimentalizaçãoétambémabasepara Namespaces em linguagens de programação (e a popular estrutura .NET segue exatamente a mesma convenção de nomenclatura: using System.Threading.Tasks ).

Então, agora podemos supor que a configuração network.http.xxx não deve ter influência sobre network.ftp ou outros submódulos da rede, enquanto uma configuração network.xxx provavelmente terá influência sobre todos eles.

A informação extra é benéfica ...

  • para o usuário: temos uma ideia melhor de qual parte do aplicativo uma determinada configuração terá influência, facilitando a resolução de problemas (e evitando!)

  • e para os desenvolvedores: a pessoa que trabalha ou soluciona problemas de um módulo específico pode estar facilmente ciente de qual configuração modificável pelo usuário pode afetar seu trabalho atual e se concentrar nisso.

por 19.02.2013 / 01:30
4

Você mencionou uma das principais razões da frase inicial: chaves hierárquicas.

Cada grupo de chaves é agrupado. Todas as chaves relacionadas à rede são network.something. Todas as chaves relacionadas a http são network.http.something e assim por diante. Isso faz com que a chave em si anuncie um pouco o que o valor se refere. Se alguém usasse o estilo de arquivo ini (que, para ser claro, nada o impediria de usar esses tipos de chaves se quisesse) com pares [section] e key = value, uma determinada chave pode ser ambígua até a seção ser conhecido. Mais ainda, o posicionamento das chaves em um arquivo é importante. Colocar a chave ssl na seção [GUI] é provavelmente um erro e pode fazer com que a chave seja ignorada. O estilo a.b.c deve significar que a ordem das chaves em um arquivo não importa. Se você ler networking.http.ssl.key = não importa se a linha anterior foi gui.background.color = ou outra coisa. A chave totalmente qualificada é denominada.

Por que isso é tão comum? É muito útil, é por isso. Também é fácil para os humanos lerem e entenderem (numa base chave por tecla) e editarem.

De onde veio isso? Eu diria que estruturas de estilo C, que provavelmente têm uma linhagem desconhecida, e que também se espalharam em muitas outras linguagens de programação. Definir um valor em uma estrutura C seria structure.property = value e, para estruturas aninhadas, structure.substructure.property = value e assim por diante (embora, na vida real, os ponteiros traduzissem muitos desses pontos em - > uma pequena bagatela).

    
por 19.02.2013 / 00:54