2010-11-20 4 views
2

Ich bin dabei, eine Webanwendung zu entwerfen, die über mehrere installierbare Module mit unterschiedlichen Funktionen verfügt. Es gibt viele gemeinsame Sachen hier und ich habe 3 C# -Klassenbibliotheken, von denen ich weiß, dass sie einfach in verschiedenen Projekten verwendet werden können.Wie kann ich ein ASP.NET-Projekt für die Wiederverwendung strukturieren?

Das Bit, auf dem ich feststecke, ist die eigentliche Website selbst. Im Idealfall möchte ich eine ASP.NET Seitenbibliothek machen, die über mehrere Projekte wiederverwendet werden kann, aber ich verstehe, dass dies nicht möglich ist.

Wie strukturieren Sie Ihre Website-Projekte, so dass Seiten über mehrere Projekte hinweg wiederverwendet werden können? Bis jetzt ist die einzige Lösung, die ich mir ausgedacht habe, ein Repository in SVN zu erstellen und es in den Eigenschaften des Hauptprojekts svn:externals referenzieren zu lassen. Dadurch kann ich Seiten zu diesem Verzeichnis hinzufügen, die allen Websites gemeinsam sind, und ich weiß, dass ich sie verwenden kann, um sie für andere Projekte auszuprobieren. Ich denke jedoch, dass dies ein bisschen klobig ist und Probleme bei der Erstellung neuer Projekte verursachen wird (es müsste eine Reihe von Schritten zur Erstellung der neuen Lösung geben, um sicherzustellen, dass die richtigen externen Komponenten vorhanden sind).

Gibt es eine bessere Lösung? Was ist der beste Weg, wenn Sie gemeinsame ASPX-Dateien für mehrere Client-Projekte freigeben möchten? Wie verwalten Sie Änderungen gegen sie?

Vielen Dank im Voraus!

EDIT:

Vielen Dank an David für seine Antwort. Ich habe darüber mehr nachgedacht und dachte, ich würde einige meiner konkreteren Ideen/Bedenken auflisten. Erstens, ein bisschen mehr über das Projekt (die Projekte). In erster Linie ist es ein CMS. Wir haben jedoch auch Kunden, die CRM wollen, und es gibt auch Kunden, die keine wollen und ein komplettes maßgeschneidertes System von Grund auf wollen.

In meinem ursprünglichen Beitrag oben habe ich über Unterverzeichnisse der Hauptwurzel (z. B. cms) gesprochen, die svn:externals verwenden, um das einfache erneute Teilen von Webseiten über mehrere Projekte hinweg zu ermöglichen. Ich fange an zu denken, dass dies der einzige Weg ist, dies zu tun. Eine Sache, die mich gestört hat, war, wenn die URL des Kunden war:

http://www.shotgunanddribble.com/cms/content.aspx

Aber ich denke, ich die Application_BeginRequest können schrecklich Urls mildern, indem sie Umschreiben nach der Konfiguration der Website des Kunden. ZB wenn ein Kunde nur ein CMS wäre, könnte ich seine Top-Level-Domain auf /cms/ umschreiben. Gleiches mit, wenn sie ein CRM waren. Wenn sie beide waren:

http://www.shotgunanddribble.com/ ->/cms/

http://crm.shotgunanddribble.com/ ->/crm/

Gibt es einen Nachteil dieser Art von Neufassungen zu verwenden? Ich denke, dass, außer jemand magischen Ideen hat, svn:externals meine einzige Hoffnung ist.

Antwort

1

Der eigentliche Code ist einfach genug, um in anderen Assemblies zu setzen und zu erben, aber die ASPX-Dateien sind definitiv eine andere Geschichte. Wie wäre es mit einer gemeinsamen Bibliothek von Benutzersteuerelementen, die den größten Teil des Anzeigeinhalts enthalten, und jedes Projekt würde seine eigenen Seiten haben, die meistens nur die Benutzersteuerelemente umrahmen? Ich habe es noch nie ausprobiert, also könnte es ein "Gotcha" geben, das ich mir gerade nicht vorstelle.

+0

Hallo David, Danke für diese Antwort und es hat leider eine Weile gedauert, bis ich zurück war. Ja, ich dachte daran, Benutzersteuerungen ausgiebig zu nutzen, um viele der üblichen visuellen Elemente zu verwalten.Aus irgendeinem Grund erscheint es klobig, alles in eine Kontrolle zu bringen, aber das ist keine Kritik, nur eines dieser Gefühle. Jenseits von 'svn: externals' Ich denke, Kontrollen sind der einzige Weg, dies zu tun. –

+0

@ Moo-Juice: Ich stimme zu. Sehr früh in .NET bin ich bei einem Projekt verrückt geworden und obwohl es sehr flexibel in seinem Design zu sein schien, war die Wartung merklich klobig. Ich bin mir sicher, dass es gut genug ist, um dem Design zu entsprechen, aber bestimmte Konventionen müssen von anderen Entwicklern des Projekts dokumentiert und eingehalten werden. – David

+0

Ich werde diese Antwort akzeptieren, da ich glaube, dass 'svn: externals' und Benutzersteuerelemente die einzige Möglichkeit sind, sie zu lösen. Ersteres kümmert sich um Unterverzeichnisse von allgemeinen Seiten und Kontrollen, um die Beinarbeit zu erleichtern, um neue kundenspezifische Dinge so allgemein wie möglich zu machen. –

Verwandte Themen