2008-09-28 10 views
10

¿Qué cantidad de clases cree que es ideal por cada espacio de nombres "rama"? ¿En qué punto uno decidiría dividir un espacio de nombres en varios? No discutamos el agrupamiento lógico de las clases (supongamos que están lógicamente agrupadas adecuadamente), en este punto me concentro en el número de clases mantenibles vs. no mantenibles.Número ideal de clases por rama de espacio de nombres

Respuesta

27

"42 No, no funciona ...?"

Ok, vamos a poner nuestra destreza de programación para trabajar y ver lo que es la opinión de 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 

Y esto nos da la siguientes estadísticas sobre el número de tipos por espacio de nombres:

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

Con los IDEs modernos y otras herramientas de desarrollo, diría que si todas las clases pertenecen a un espacio de nombres, entonces no hay ningún número arbitrario en el que deba dividir un espacio de nombres solo para el mantenimiento.

+1

Con los IDEs modernos, la autocompleta se vuelve mucho menos efectiva con 10K clases por espacio de nombres. – Constantin

+1

Estoy intentando realmente, realmente difícil imaginar un sistema con algo cerca de 10k clases (¡!?!), Especialmente todo en un espacio de nombres. –

+3

.Net Framework, en general, solo tiene qué, tipos de 5k? Y eso está dividido en un centenar de espacios de nombres –

0

Sé que no quiere hablar de agrupación lógica, sin embargo, para hacer una división, debe poder agrupar los dos espacios de nombres diferentes. Empezaría a considerar un nuevo espacio de nombres en alrededor de 30 clases; Sin embargo, no lo consideraría una gran preocupación.

3

Creo que un espacio de nombres debe ser tan grande como debe ser. Si hay una razón lógica para crear un espacio de nombres hermano o un espacio de nombres secundario, hágalo. La razón principal por la que veo que se divide en espacios de nombres es facilitar el desarrollo, facilitando a los desarrolladores navegar por la jerarquía del espacio de nombres para encontrar lo que necesitan.

Si tiene un espacio de nombre con muchos tipos y cree que es difícil encontrar algunos, considere moverlos a otro espacio de nombres. Utilizaría un espacio de nombres secundario si los tipos están especializando los tipos de espacio de nombres padre y un espacio de nombres hermanos si los tipos pueden usarse sin los tipos de espacio de nombres originales o tienen un propósito diferente. Por supuesto, todo depende de lo que esté creando y del público objetivo.

Si un espacio de nombre tiene menos de 20 tipos, es poco probable que valga la pena dividirlo. Sin embargo, debe considerar la asignación del espacio de nombres durante el diseño para que sepa de antemano al desarrollar, qué tipos van en qué espacios de nombres. Si realiza la asignación del espacio de nombres durante el desarrollo, espere una gran cantidad de refactorización mientras determina qué debe ir a dónde.

0

Debo decir que encuentro todo lo anterior una lectura muy sorprendente.

Los expertos en usabilidad nos dicen que mantengamos el número de opciones en un menú a un número limitado para que podamos ver inmediatamente todas las opciones. Lo mismo se aplica a la forma en que organizas tu trabajo.

Normalmente esperaría de 4 a 10 tipos en un espacio de nombres. Ahorra tanto para buscar cosas y desplazarse hacia arriba y hacia abajo. Es tan rápido y fácil mover cosas usando reafilamiento que no veo ninguna razón para no hacerlo.

+1

No estoy tan seguro de que estoy de acuerdo con la idea de que esto ahorrará tiempo de búsqueda de clases. Si como subproducto de la pauta de 4 a 10 elementos terminas con una jerarquía más profunda, creo que en realidad tomaría más tiempo buscar cosas. – Larsenal

0

Otra cosa que debe mencionarse es que a menudo vale la pena colocar una clase que contenga métodos de extensión en su propio espacio de nombres, para que pueda habilitar o deshabilitar esos métodos de extensión con una directiva using. Entonces, si la cosa en el espacio de nombres es una clase estática que contiene métodos de extensión, la respuesta es 1.

1

Una cosa que no se cubre aquí, aunque se relaciona con el punto de Chris en cierto modo, es que la capacidad de aprendizaje de un el espacio de nombres no solo está relacionado con la cantidad de elementos.

(Por cierto, esto se aplica al "espacio de nombres" en el sentido más amplio - una clase en sí misma es un espacio de nombres en el sentido general en que contiene ciertos nombres que significan algo diferente en ese contexto que en otra, una enumeración es un espacio de nombres en este sentido también).

Digamos que encuentro un espacio de nombres relacionado con XML con una clase Element. Aprendo un poco sobre esto y cuando miro la clase de atributos, veo cierta similitud. Cuando veo una clase ProcessingInstruction, puedo adivinar razonablemente cómo funciona (y es probable que sea un error de diseño si creo que está completamente equivocado, en el mejor de los casos las diferencias no solo tienen que estar documentadas, sino explicadas). Adivino que hay una clase de Comment antes de siquiera verla. Buscaré tu clase de TextNode y me pregunto si todos estos heredan de Node en lugar de tener que aprender sobre ellos desde los documentos. Me pregunto cuál de los varios enfoques razonables que tomó con su clase Lang en lugar de preguntarse si está allí.

Debido a que todo se relaciona con un dominio que ya tengo conocimiento de, lo conceptual "costo" de estas siete clases es mucho, mucho menor que si los siete clases en las llamadas, ovejas, Televisión, FallOfSaigon , Enuii, AmandaPalmersSoloWork, ForArtsSakeQuotient y debido proceso.

Esto se relaciona con el punto de Chirs, porque él dice que se nos aconseja por el uso para mantener el número de opciones abajo. Sin embargo, si tenemos una selección de países en orden alfabético, asimilamos inmediatamente toda la lista y elegimos la que necesitamos al instante, por lo que no se aplican los consejos para mantener las opciones (de hecho, algunas opciones a la vez pueden ser ambas) menos útil y potencialmente insultante).

Si su espacio de nombre tiene 200 nombres, pero solo tiene que realmente aprenda media docena para comprender el lote, entonces será mucho más fácil asimilar que tener una docena de nombres con poca relación entre ellos.

Cuestiones relacionadas