Ich war im letzten Jahr an einer Reihe von MVC.NET- und c # -Desktopprojekten in unserem Unternehmen beteiligt und habe es auch geschafft, meine Nase in andere Projekte zu stecken (natürlich in einer schreibgeschützten Lernkapazität).
Dabei ist mir aufgefallen, dass es in den verschiedenen Projekten und Teams viele Funktionen gibt, die gut gegen gute Schnittstellen und Abstraktionen ausgelegt sind. Da wir manchmal unsere eigene Arbeit mögen, bemerkte ich, dass einige Projekte genau dieselbe Klasse hatten, Methode, die offensichtlich in eine kopiert wurde, und daher leicht in ein neues Projekt verschoben werden konnten (wahrscheinlich von demselben Entwickler, der ursprünglich schrieb es)
Ich erwähnte diese Tatsache in einem unserer gelegentlichen Programmierertreffen und schlug vor, einige dieser Funktionen in eine Kernbibliothek des Unternehmens zu integrieren, die wir im Laufe der Zeit aufbauen und für mehrere Projekte verwenden können. Alle waren sich einig und ich begann diese Möglichkeit zu prüfen.
Ich bin jedoch ziemlich früh auf einen Stolperstein gestoßen. Unser Team konzentriert sich derzeit hauptsächlich auf MVC und wir haben Projekte hauptsächlich in 2.0, beginnen aber, auf 3.0 zu verzweigen. Wir haben auch eine Reihe von Desktop-Anwendungen, die von einigen gemeinsam genutzten Klassen und grundlegenden Hilfsmethoden profitieren können.
Anfangs habe ich beim Erstellen dieser DLL einige gemeinsam genutzte Klassen aufgenommen, die für jeden Projekttyp (Web, Client usw.) verwendet werden können. Dann habe ich versucht, einige gemeinsam genutzte Module hinzuzufügen, die nur in unseren MVC-Anwendungen nützlich sind. Dies bedeutete jedoch, dass ich einen Verweis auf einige Microsoft Web-DLLs einfügen musste, um einige der von mir erstellten Klassen nutzen zu können (zu diesem Zeitpunkt MVC 2.0).
Mein Problem ist nun, dass wir eine gemeinsam genutzte DLL haben, die Verweise auf webspezifische Bibliotheken enthält, die möglicherweise auch in einer Clientanwendung verwendet werden könnten. Darüber hinaus hat unsere DLL ursprünglich auf MVC 2.0 verwiesen, und wir werden schließlich für alle Projekte auf MVC 3.0 umsteigen. Aber ich erwarte, dass viele der Klassen in dieser Bibliothek für MVC 3 usw. Noch relevant sind
Unser Code in dieser DLL ist in eigene Namespaces unterteilt, z.
- CompanyDLL.Primitives
- CompanyDLL.Web.Mvc
- CompanyDLL.Helpers etc etc.
Meine Fragen sind also:
- Ist es in Ordnung, eine gemeinsam genutzte Bibliothek wie diese zu erstellen, oder sollten wir, wenn wir webspezifische Funktionen enthalten, eine separate Web-DLL erstellen, die nur auf ein bestimmtes Framework oder eine bestimmte MVC-Version ausgerichtet ist?
- Wenn dies in Ordnung ist, welche Probleme können auftreten, wenn Sie beispielsweise die Bibliothek verwenden, die auf MVC 2 in einem MVC 3-Projekt verweist. Ich würde denken, dass wir möglicherweise auf ein Kompatibilitätsproblem stoßen oder sogar auf Probleme, bei denen die Entwickler, die die Bibliothek verwenden, nicht erkennen, dass sie MVC 2.0-Bibliotheken benötigen. Sie möchten möglicherweise nur einige der generischen Klassen usw. Verwenden
Das Konzept schien damals eine gute Idee zu sein, aber ich fange an zu denken, dass es vielleicht keine wirklich praktische Lösung ist. Aber die Häufigkeit, mit der ich projektübergreifend kopierte Klassen und Methoden gesehen habe, weil sie sich als bewährter Testcode erwiesen haben , ist ein bisschen nervig, um ganz ehrlich zu sein!
AKTUALISIERT : Weiter zu Bernards Antwort, die ich an Bord genommen habe und die mir als guter Rat erscheint. Ich möchte jedoch einige gemeinsam genutzte Klassen erstellen, die wahrscheinlich sowohl in MVC 2- als auch in MVC 3-Projekten nützlich sind. Meine gemeinsam genutzte Assembly muss jedoch auf eines der MVC-Frameworks verweisen, damit ich meine gemeinsam genutzten Klassen überhaupt erstellen kann.
Also weiter auf mein Q2 oben erweitern.
- Wenn ich eine MVC 3-Weblösung wollte, müsste ich ein gemeinsames CompanyDLL.Web.Mvc3-Projekt haben, das dann speziell auf MVC 3 verweist? Würde das bedeuten, den gesamten Code von meiner CompanyDLL.Web.Mvc2-Lösung in dieses neue gemeinsam genutzte Mvc3-Projekt zu kopieren?
Es scheint, dass mir einige grundlegende Entwurfsfähigkeiten beim Erstellen gemeinsamer Assemblys sowie beim Erstellen und Verweisen auf verschiedene Framework-Versionen fehlen . Oder es ist genauso einfach, wie wir es aufsaugen und eine CompanyDLL.Web.Mvc2- , CompanyDLL.Web.Mvc3- , CompanyDLL.Web.Mvc4 usw. usw.-Bibliothek erstellen ...