Pergunta

O número de classes que você acha que é ideal por um namespace "ramo"? Em que ponto seria um decidir quebrar um namespace em vários queridos? Não vamos discutir o agrupamento lógico de aulas (assumir que eles estão agrupados logicamente corretamente), estou, neste momento, com foco na sustentável vs. não o número sustentável de classes.

Foi útil?

Solução

"42? Não, ele não funciona ..."

Ok, vamos colocar o nosso talento de programação para o trabalho e ver o que é a opinião da Microsoft:

# IronPython
import System
exported_types = [
  (t.Namespace, t.Name)
  for t in System.Int32().GetType().Assembly.GetExportedTypes()]

import itertools
get_ns = lambda (ns, typename): ns
sorted_exported_types = sorted(exported_types, key=get_ns)
counts_per_ns = dict(
  (ns, len(list(typenames)))
  for ns, typenames
  in itertools.groupby(sorted_exported_types, get_ns))
counts = sorted(counts_per_ns.values())

print 'Min:', counts[0]
print 'Max:', counts[-1]
print 'Avg:', sum(counts) / len(counts)
print 'Med:',
if len(counts) % 2:
  print counts[len(counts) / 2]
else: # ignoring len == 1 case
  print (counts[len(counts) / 2 - 1] + counts[len(counts) / 2]) / 2

E isso nos as seguintes estatísticas sobre o número de tipos por namespace dá:

C:\tools\nspop>ipy nspop.py
Min: 1
Max: 173
Avg: 27
Med: 15

Outras dicas

Com IDEs modernas e outras ferramentas dev, eu diria que, se todas as classes pertencem a um namespace, então não há nenhum número arbitrário em que você deve acabar com um namespace apenas para manutenção.

Eu acho que um namespace deve ser tão grande quanto ele precisa ser. Se há uma razão lógica para criar um espaço de nomes irmão ou namespace criança, em seguida, fazê-lo. A principal razão que eu vê-lo a se dividir em namespaces é para facilitar o desenvolvimento, tornando mais fácil para os desenvolvedores a navegar a hierarquia de namespace para encontrar o que precisa.

Se você tem um espaço de nomes com muitos tipos, e você sente que é difícil encontrar certas pessoas, então considerar movê-los para outro namespace. Gostaria de usar um namespace criança se os tipos estão se especializando os tipos de namespace pai, e um espaço de nomes de irmãos se os tipos podem ser utilizados sem os tipos de namespace originais ou ter uma finalidade diferente. Claro, tudo depende do que você está criando e o público-alvo.

Se um namespace com menos de 20 tipos, é improvável que valer a pena divisão. No entanto, você deve considerar a alocação de espaço de nomes durante o projeto de modo que você sabe de antemão quando em desenvolvimento, que tipos ir em que namespaces. Se você fazer alocação de espaço de nomes durante o desenvolvimento, esperar um monte de refatoração como você determinar o que deve ir para onde.

Uma coisa que não é coberto aqui, que se refira a ponto de Chris' de certa forma, é que o learnabilty de um namespace não está apenas relacionado com o número de itens.

(Aliás, isso se aplica a "namespace" no sentido mais amplo - uma classe em si é um namespace no sentido geral em que ele contém certos nomes que significam uma coisa diferente nesse contexto do que eles poderiam em outro, um enum é um espaço de nomes, neste sentido, também).

Vamos dizer que eu encontro um espaço de nomes XML-relacionado com um elemento classe. Eu aprender um pouco sobre isso e quando eu olhar para o atributo classe, eu vejo alguma semelhança. Quando eu, em seguida, ver um ProcessingInstruction classe, eu posso fazer uma suposição razoável sobre como ele funciona (e é provavelmente uma falha de projeto, se eu acho completamente errado, na melhor das diferenças não precisa apenas de ser documentada, mas explicou ). Eu posso imaginar que há uma classe Comment antes mesmo de vê-lo. Eu vou olhar para o seu TextNode classe e me pergunto se todos estes herdar de Node , em vez de ter que aprender sobre eles a partir dos docs. Eu vou saber qual das várias abordagens razoáveis ??que você tomou com o seu Lang classe em vez de admirar se ele está lá.

Porque tudo isso diz respeito a um domínio que já tenho conhecimento de, o "custo" conceitual dessas sete classes é muito, muito menos do que se os sete classes onde chamados, Sheep , Television , FallOfSaigon , Enuii , AmandaPalmersSoloWork , ForArtsSakeQuotient e devido processo legal .

Trata-se de ponto Chirs', porque ele diz que somos aconselhados por uma questão de usabilidade para manter o número de escolhas para baixo. No entanto, se temos uma escolha dos países em ordem alfabética, nós Grokar imediatamente toda a lista e escolher o que precisamos instantaneamente, assim que o conselho para manter escolhas para baixo não se aplica (na verdade, algumas opções em um momento pode ser tanto menos útil e potencialmente insultar).

Se o seu namespace tem 200 nomes, mas você só tem que realmente aprender meia dúzia de compreender o lote, então vai ser muito mais fácil de Grokar do que ter uma dúzia de nomes com pouca relação com uns aos outros.

Eu sei que você não quer discutir agrupamento lógico, no entanto fazer uma cisão você precisa ser capaz de agrupar os dois namespaces diferentes. Eu começar a considerar um novo namespace em torno de 30 classes; porém eu não consideraria isso uma grande preocupação.

Devo dizer que encontrar toda a leitura acima de muito surpreendente.

especialistas

Usabilidade nos dizer para manter o número de opções em um menu para um número limitado para que possamos ver imediatamente todas as escolhas. O mesmo se aplica à forma como você organizar seu trabalho.

Eu normalmente esperar 4-10 tipos em um namespace. Salva tanto rodada de caça para o material e rolando para cima e para baixo. É tão rápido e fácil para mover coisas ao redor usando ReSharper que eu não vejo nenhuma razão para que não o fazer.

Outra coisa que deve mencionado é que muitas vezes paga para colocar uma classe que contém os métodos de extensão em seu próprio namespace, de modo que você pode ativar ou desativar esses métodos de extensão com uma directiva using. Então, se a coisa no espaço de nomes é uma classe estática que contém métodos de extensão, a resposta é 1.

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