Frage

Wie organisieren Sie Ihren Code, so dass es leicht über Business-Projekte portiert werden kann, ohne unnötig aufblähen zu tragen?

Zum Beispiel (in .NET), lassen Sie uns sagen, dass Sie die folgenden Namespaces haben:

namespace Computers
    - Hardware
         - Motherboard
         - GPU
namespace Monitors
    - Display
         - Mirrors
namespace Peripherals
    - USB
    - PS/2
  • Erstellen Sie ein Projekt pro Elternteil Namespace und dann dieses Projekt schon in anderen Projekten verweisen?
  • Erstellen Sie eine große Klassenbibliothek und Port, die Sache um (auch wenn Sie nur 5% der Bibliothek müssen)?
  • Oder wollen Sie nur eine Datei erstellen und kopieren Sie den Code Sie in diese Datei benötigen; diese Datei um in allen Projekten toting, die Sie benötigen eine „Plug and Play“ zu erreichen Architektur (so schlecht, wie dies scheint)?

Edit: Ich bin nicht auf der Suche für .Net Antworten speziell, aber es ist das konkrete Beispiel, das ich verwende (da ein abstraktes Beispiel würde es schwieriger machen, die Frage in diesem Fall zu verstehen)

War es hilfreich?

Lösung

  

Haben Sie ein Projekt pro Elternteil erstellen   Namespace und dann verweisen, die   Projekt dll in anderen Projekten?

Nicht unbedingt. Es endet in der Regel so, weil meine Bibliotheken der Regel nicht sehr groß sind, aber Sie werden Microsoft feststellen, schon gar nicht, dass tut. System.Web existiert auch wenn Sie die System.Web Referenz nicht enthalten. Sie erhalten nur mehr Klassen, wenn Sie tun. Darauf hinweist, dass der Namespace System.Web in verschiedenen DLLs verwendet wird.

  

Erstellen Sie eine große Klassenbibliothek   und Port das Ding um (auch wenn   Sie benötigen nur 5% der Bibliothek)?

Ja. Festplattenspeicher ist billig, billiger als redundanten Code beibehalten wird.

  

Oder erstellen Sie nur eine Datei und   Kopieren Sie den Code, den Sie in dieser Datei benötigen;   toting diese Datei um in der ganzen   Projekte, die Sie erreichen müssen ein   "Plug and Play" Architektur (so schlimm   wie dies scheint)?

Es hängt von der Funktion. Ich würde in der Regel so etwas wie dies in einem Snippet platzieren. Zum Beispiel kann eine typische Funktion, die in meinen Web-Projekten zeigt sich so etwas wie:

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

Es schien nie ein guter Kandidat für eine Bibliotheksfunktion, denn dann würde ich in der CSS-Klasse übergeben muss ich den colspan Wert für die Zelle verwenden, und gelegentlich wollte. Aber Sie werden irgendeine Art von Implementierung wie diese Sitzung an wenigen Stellen in meinen Web-Projekten.

Andere Tipps

Ich nehme mein Stichwort von DNA, und kopieren Sie alle oder Teile meiner eine großen Klassenbibliothek von Projekt Projekt, auch wenn ich in einem Projekt nur 1% der Bibliothek verwenden. Ich frei umschreiben Methoden und Klassen je nach Bedarf.

Obwohl dieser Ansatz etwas entgegen der herkömmlichen Programmierung Weisheit ist, würde ich es nicht klopfen: es hat funktioniert sehr erfolgreich für die Dinge für die letzten 3500000000 Jahre leben. Wie im Leben, hemmt die Alternative (Zementierung die Schnittstellen und die Implementierungen von kompilierten Assemblys über Projekte Sharing) ändern und praktisch garantiert etwaige Löschung.

Ich halte jede Komponente als ein diskretes Modul, und verwenden Sie Maven meine Abhängigkeiten zu verwalten (es ist nicht nur sehen für Java, diese Frage , Byldan ist ein .Net-Äquivalent).

So können Sie den Code wiederverwenden können, ohne sie in das Projekt einzubeziehen ist. In Ihrem Beispiel oben könnte ich drei Artefakte, eine für jeden Namespace, es sei denn es einen guten Grund, um sie zusammen zu halten (dies hilft, lose Kopplung zu erzwingen).

Ich habe vor kurzem festgestellt, dass ich versuche, die Zahl der Projekte zu halten, wenn auch nur so, dass die Zahl der tatsächlichen Baugruppen am Ende erstellt reduziert wird - ich habe es jetzt noch einfacher finden mit während der Entwicklung zu befassen. Dies ist möglicherweise, weil ich es schwer zu schaffen Projekte, die zwar wirklich modular und unabhängig voneinander sind.

Ich denke, die allgemeine Regel sein könnte: Wenn das Projekt wirklich unabhängig von allen anderen entwickelt werden kann und in anderen Projekten ohne andere Abhängigkeiten eingesteckt, dann ist es sein eigenes Projekt machen. Wenn Sie feststellen, dass es immer andere Projekte, die um verwiesen werden müssen, für sie arbeiten (zum Beispiel vielleicht in Ihrem Monitore Projekt zu finden, dass gar nichts funktioniert, wenn Sie auch den Computer-Namensraum mit den GPU-Klassen enthalten), ich würde sie dann in einem Projekt zusammen.

Abgesehen davon, dass ich glaube nicht, die Regeln sind zu hart und schnell. Wirklich hängt von vielen auf, was in den Versammlungen, es ist schwer zu willkürlichen Regeln zu machen ...

Nur mein zwei Cent, nicht viel wert ...

ich mit einer einzigen DLL beginnen, und wie es größer wird und beginnt, einige ziemlich unabhängige Komponenten zu enthalten, kann ich wählen, um sie als separate DLL Faktor aus. Für mich ist es in erster Linie eine Frage der Ästhetik - Ich mag Dinge, unabhängig und orthogonal und gut organisiert zu halten. Es ist nichts falsch mit einem großen dll, angesichts der Menge an Speicher, Plattenplatz heutzutage zur Verfügung.

Für Sachen, die in mehreren Projekten gemeinsam genutzt wird ich in der Regel mit dem einem großen DLL Ansatz gehen. Hier liegt der Knackpunkt aber, wenn Sie viele Projekte mit diesen Typen haben, empfehle ich sehr stark, es zu benennen und in das GAC werfen. Was Sie schließlich den Weg laufen, wie Sie mehr und mehr Projekte hinzufügen, ist der Wunsch, einen Bruch Wechsel zu einer gemeinsamen Komponente zu machen. Wenn Sie nicht stark Namensgebung / GAC verwenden, dann müssen Sie gehen und jede App zu aktualisieren, wenn Sie die Änderung vornehmen, und zwangsläufig werden Sie eine vergessen, und etwas in der Produktion wird explodieren.

Strong Name es, halten eine Release-Version in einem zentralen Ordner in der Quellcodeverwaltung, und immer, dass verweisen. Dann auf deploy es in dem GAC werfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top