Pregunta

¿Cómo organizar el código para que fácilmente puede ser portado a través de los proyectos empresariales sin necesidad de llevar hinchazón innecesaria?

Por ejemplo (en .Net), digamos que usted tiene los siguientes espacios de nombres:

namespace Computers
    - Hardware
         - Motherboard
         - GPU
namespace Monitors
    - Display
         - Mirrors
namespace Peripherals
    - USB
    - PS/2
  • Cómo se crea un proyecto por espacio de nombres de los padres y luego hacer referencia al archivo DLL proyecto en otros proyectos?
  • Cómo se crea una biblioteca de clases grandes y puerto de esa cosa (incluso si sólo se necesita un 5% de la biblioteca)?
  • O, usted acaba de crear un archivo y copiar el código que necesita en ese archivo; portando ese archivo en torno a todos los proyectos que se necesita para lograr un "plug and play" arquitectura (tan malo como parece)?

Editar No estoy en busca de respuestas .Net específicamente, pero es el ejemplo concreto que estoy usando (ya que un ejemplo abstracto haría más difícil de entender la cuestión en este caso)

¿Fue útil?

Solución

  

Cómo se crea un proyecto por los padres   espacio de nombres y de referencia que   dll del proyecto en otros proyectos?

No necesariamente. Por lo general, termina de esa manera porque mis bibliotecas normalmente no son muy grandes pero se dará cuenta de Microsoft desde luego no hacerlo. System.Web existe incluso si no se incluye la referencia System.Web. Que acaba de obtener más clases si lo hace. Lo que indica que el espacio de nombres System.Web se utiliza en varios archivos DLL diferentes.

  

Cómo se crea una biblioteca de clase grande   y el puerto de esa cosa (incluso si   sólo se necesita un 5% de la biblioteca)?

Sí. espacio en disco duro es barato, más barato que el mantenimiento de código redundante.

  

O, usted acaba de crear un archivo y   copiar el código que necesita en ese archivo;   portando ese archivo en torno a todo el   proyectos que se necesita para lograr una   "Plug and play" arquitectura (tan malo   ya que parece)?

Depende de la función. Por lo general me pongo algo como esto en un fragmento. Por ejemplo, una función típica que aparece en mis proyectos web es algo como:

void ShowErrorMessage(HtmlTableRow row, string message)
{
   row.Cells.Clear();
   row.Cells.Add(new HtmlTableCell());
   row.Cells[0].InnerHtml = message;
   row.Cells.Attributes.Add("class", "error");
   row.Visible = true;
}

Nunca ha parecido un buen candidato para una función de biblioteca, porque entonces tendría que pasar en la clase CSS que quería utilizar y, ocasionalmente, el valor colspan para la célula. Pero se podrán ver algún tipo de aplicación como esta sentada en unos pocos lugares en mis proyectos web.

Otros consejos

Me quito el ejemplo de ADN, y copiar la totalidad o parte de mi una enorme biblioteca de clases de proyecto en proyecto, aunque yo sólo uso el 1% de la biblioteca en un mismo proyecto. I libremente reescribir métodos y clases, según sea necesario.

A pesar de que este enfoque es algo en contra de la sabiduría convencional de programación, no lo golpee: se ha trabajado con mucho éxito para los seres vivos de los últimos 3,5 mil millones de años. Como en la vida, la alternativa (cementar las interfaces y las implementaciones compartiendo ensamblados compilados a través de proyectos) inhibe el cambio y prácticamente garantiza una eventual extinción.

guardo cada componente como un módulo discreto, y el uso de Maven para gestionar mis dependencias (no se trata sólo para Java, consulte esta , Byldan es un equivalente .Net).

De esta manera se puede reutilizar el código sin tener que incluirlo en el proyecto. En el ejemplo anterior podría tener tres artefactos, uno para cada espacio de nombres a menos que haya una buena razón para mantenerlos juntos (esto ayuda a hacer cumplir la articulación flexible).

He descubierto recientemente que trato de mantener el número de proyectos hacia abajo, aunque sólo sea por lo que se reduce el número de conjuntos reales creados en el final - Me resulta más fácil tratar con durante el desarrollo. Esto es posiblemente debido a que se me hace difícil la creación de proyectos que son verdaderamente modular e independiente el uno del otro sin embargo.

Creo que la regla general podría ser: si el proyecto realmente se puede desarrollar de forma independiente de todos los demás y enchufado a otros proyectos sin otras dependencias, a continuación, hacer que su propio proyecto. Si usted encuentra que siempre hay otros proyectos que necesitan ser referenciada con el fin de que funcione (por ejemplo, tal vez en sus monitores proyecto que encuentran que nada funcionará a menos que incluya también el espacio de nombres de ordenadores con las clases de GPU), a continuación, me gustaría poner juntos en un proyecto.

Aparte de eso, no creo que las reglas son demasiado duro y rápido. Realmente depende mucho de lo que hay en las asambleas, es difícil establecer reglas arbitrarias ...

Sólo mis dos centavos, no vale mucho ...

Empiezo con un solo archivo DLL, y ya que se hace más grande y comienza a contener algunas piezas bastante independientes, puedo elegir al factor ellas como DLL separada. Para mí, es sobre todo una cuestión de estética - Me gusta mantener las cosas independientes y ortogonales y bien organizada. No hay nada malo con una gran DLL, dada la cantidad de memoria, espacio en disco disponible en la actualidad.

Para la materia que se comparte en múltiples proyectos por lo general ir con el enfoque de gran DLL. Aquí está el problema, sin embargo, si tiene muchos proyectos que utilizan este tipo, le recomiendo fuerte nombrarlo y lo lance al GAC. Lo que finalmente va a tener a medida que agrega más y más proyectos es el deseo de hacer un cambio importante a un componente compartido. Si no está utilizando fuerte de nombres / GAC, entonces usted tiene que ir y actualizar todas las aplicaciones cuando se hace el cambio, e inevitablemente se le olvida una, y algo en la producción va a explotar.

nombre de Strong, mantener una versión de lanzamiento en una carpeta centralizada de control de código fuente, y siempre que la referencia. Luego, el despliegue echar en el GAC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top