Question

Comment organisez-vous votre code afin qu'il puisse facilement être porté sur les projets d'affaires sans porter ballonnement inutiles?

Par exemple (en .Net), disons que vous avez les espaces de noms suivants:

namespace Computers
    - Hardware
         - Motherboard
         - GPU
namespace Monitors
    - Display
         - Mirrors
namespace Peripherals
    - USB
    - PS/2
  • Avez-vous créer un projet par espace de noms parent et référence qui dll projet dans d'autres projets?
  • Avez-vous créer une bibliothèque grande classe et port chose autour (même si vous avez seulement besoin de 5% de la bibliothèque)?
  • Ou, vous venez de créer un fichier et copiez le code dont vous avez besoin dans ce fichier; trimballer ce fichier autour dans tous les projets que vous avez besoin pour réaliser une architecture « plug and play » (aussi mauvais que cela semble)?

Edit: Je ne cherche pas de réponses .Net en particulier, mais il est l'exemple concret que j'utilise (depuis un exemple abstrait rendrait plus difficile de comprendre la question dans ce cas)

Était-ce utile?

La solution

  

Avez-vous créez un projet par parent   espace de noms et référence   dll projet dans d'autres projets?

Pas nécessairement. Il se termine généralement de cette façon parce que mes bibliothèques ne sont généralement pas très grand, mais vous remarquerez Microsoft certainement pas cela. System.Web existe même si vous ne pas inclure la référence System.Web. Vous venez d'obtenir plus de classes si vous le faites. Indiquant que l'espace de noms System.Web est utilisé dans plusieurs DLLs différentes.

  

Avez-vous de créer une grande bibliothèque de classes   et port chose autour (même si   vous avez seulement besoin de 5% de la bibliothèque)?

Oui. Espace disque dur est pas cher, moins cher que la maintenance du code redondant.

  

Ou, est-ce que vous venez de créer un fichier et   copier le code dont vous avez besoin dans ce fichier;   trimballer ce fichier autour dans tous les   les projets dont vous avez besoin pour réaliser un   architecture "plug and play" (aussi mauvais   comme cela semble)?

Cela dépend de la fonction. Je habituellement quelque chose comme ça dans un extrait. Par exemple, une fonction typique qui apparaît dans mes projets web est quelque chose comme:

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;
}

Il n'a jamais semblé être un bon candidat pour une fonction de bibliothèque car alors je dois passer dans la classe CSS je voulais utiliser de temps en temps et la valeur colspan pour la cellule. Mais vous verrez une sorte de mise en œuvre comme cette séance dans quelques endroits dans mes projets web.

Autres conseils

Je prends ma queue de l'ADN, et copier tout ou partie de ma bibliothèque une grande classe d'un projet à, même si je n'utilise que 1% de la bibliothèque dans un seul projet. Je réécris librement les méthodes et les classes selon les besoins.

Bien que cette approche est un peu à l'encontre de la sagesse conventionnelle de programmation, je ne frappe: il a travaillé avec beaucoup de succès pour vivre des choses pour les derniers 3,5 milliards d'années. Comme dans la vie, l'alternative (cimenter les interfaces et les mises en œuvre par le partage des ensembles compilés à travers des projets) empêche le changement et garantit pratiquement l'extinction éventuelle.

Je garde chaque composant en tant que module discret, et utiliser Maven pour gérer mes dépendances (il est non seulement pour Java, consultez cette question , Byldan est un équivalent .Net).

De cette façon, vous pouvez réutiliser le code sans avoir à inclure dans le projet. Dans votre exemple ci-dessus, je pourrais avoir trois objets, un pour chaque espace de noms moins qu'il y ait une bonne raison de les garder ensemble (cela aide à faire respecter le couplage lâche).

Je l'ai trouvé récemment que j'essaie de garder le nombre de projets vers le bas, si seulement pour que le nombre d'ensembles réels créés à la fin est réduite - je trouve plus facile à traiter au cours du développement. Ceci est peut-être parce que je trouve qu'il est difficile de créer des projets qui sont vraiment modulaires et indépendants les uns des autres si.

Je suppose que la règle générale pourrait être: si le projet peut vraiment être développé indépendamment de tous les autres et branché à d'autres projets sans autres dépendances, puis faire son propre projet. Si vous trouvez qu'il ya toujours d'autres projets qui doivent être référencés pour que cela fonctionne (par exemple, peut-être dans vos moniteurs projet vous trouvez que rien ne fonctionnera à moins d'inclure également l'espace de noms des ordinateurs avec les classes GPU), alors je les ai mis dans un seul projet.

En dehors de cela, je ne pense pas que les règles sont trop difficiles et rapide. dépend vraiment beaucoup sur ce qui est dans les assemblées, il est difficile d'établir des règles arbitraires ...

Juste mes deux cents, ne vaut pas beaucoup ...

Je commence avec une seule dll, et comme il grossit et commence à contenir des composants assez indépendants, je peux choisir de les tenir comme dll séparée de. Pour moi, il est avant tout une question d'esthétique - Je tiens à garder les choses indépendantes et orthogonales et bien organisé. Il n'y a rien de mal avec un grand dll, compte tenu de la quantité de mémoire, l'espace disque disponible de nos jours.

Pour des choses qui est partagé dans plusieurs projets que je vais généralement avec une grande approche de DLL. Voici le hic cependant, si vous avez de nombreux projets utilisant ce type, je recommande fortement forte de nommer et de le jeter dans le GAC. Ce que vous finirez par exécuter en tant que vous ajoutez de plus en plus de projets est le désir de faire un changement de rupture à un composant partagé. Si vous n'utilisez pas fort nommage / GAC, alors vous devez aller et mettre à jour toutes les applications lorsque vous faites le changement, et vous oublierez inévitablement un, et quelque chose dans la production va exploser.

nom fort, gardez une version de libération dans un dossier centralisé dans le contrôle de la source et la référence toujours. Puis sur Déployez le jeter dans le GAC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top