Laden...

Projektaufbau Assemblies

Letzter Beitrag vor 17 Jahren 12 Posts 4.434 Views
Projektaufbau Assemblies

Hallo,

ich bin relativ neu auf dem Gebiet der .NET-Entwicklung (daher, falls offtopic, bitte verschieben).

In meinem bisherigen C#-Projekt habe ich eine Vielzahl an Forms liegen. Ich möchte ein Administrationssystem mit Benutzerverwaltung und Rollenmanagement erstellen.
Die Benutzerdaten werden in einer MySQL-Tabelle gespeichert. Der Zugriff funktioniert mittlerweile. Allerdings wird das Projekt langsam unüberschaubar.

Gibt es eine sinnvolle Strukturierung für größere Projekte? Beispielsweise möchte ich den Datenbankzugriff komplett aus den Forms ausgliedern. Dazu kann man ja Assemblies erzeugen. Das habe ich soweit verstanden. Wenn ich jetzt aber mehrere Sachen auslagern möchte - zum Beispiel noch eine Klasse User die die Benutzerdaten kapselt, oder eine Assembly für Reguläre Ausdrücke zur Formularüberprüfung - stimmen oftmals die Verweise nicht mehr.

Ich hatte mir das ganze in etwa so vorgestellt:

Eine gemeinsame Projektmappe:
--- ProjektMappeXY
|--------C#Projekt-WindowsAnwendung (GUI)
|--- Viele Forms
|--- soll Assembly DatenbankZugriff nutzen
|--- soll Assembly RegExpression nutzen
|--- verwendet u.a. Klassen wie User die ausserhalb liegen
|-------- Leere Projektmappe MyRessources
|--- Klasse User
|--- Klassenbibliothek DatenbankZugriff (verwendet auch User)
|--- RegExpression

Besteht dann hier eine Möglichkeit alles in ein hinzugefügtes Projekt MyRessources zu erstellen? Könnte ich nachher zum Beispiel
in meinen GUIs MyRessources.User myUser = new User() aufrufen?
User wäre ja keine Assembly.

Aus meinen Büchern werden ich auch nicht schlauer 🙁

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

Du kannst ales mögliche auslagern, entweder in einer oder in mehreren Assemblies. Zur Stukturierung innerhalb der Assemblies dienen die Namespaces. Es empfiehlt sich, alle Klassen usw. einer Assembly in einen gemeinsamen Namespace zu packen.
Wenn Du eine Assembly erstellt hast, kannst Du Sie unter "Verweise" eintragen.
Du kannst auch Projekte, die sich in derselben Mappe befinden, unter Verweise referenzieren.
Wenn die Assemblies richtig in Deinem Projekt referenziert sind, kannst Du ganz normal über die Namespaces auf die Klassen zugreifen zugreifen, wie bei anderen dotnet-dlls auch.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Struktur

Jede Klasse in eine separate Assembly zu packen sollte man vermeiden, sonst kommt man schnell in die "Verweis-Hölle". Trotzdem ist es auf jeden Fall zu empfehlen, Geschäftslogik und Darstellung in verschiedenen Assemblies unterzubringen. Morgen soll vielleicht noch ein Web-Client erstellt werden. Man kann sich innerhalb von Projekten auch Ordner anlegen. Die können der Übersicht sehr zuträglich sein.

Hallo,

Der Aufbau einer Lösung bzw. eines Projektes in Komponenten bietet viele Vorteile.
Ich kann dir zum Thema komponentenorientierte Entwicklung bei Softwareprojekten folgende 2 WebCasts empfehlen:

Contract-First-Design:
http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=118769068

Microkernel-Architektur:
http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=118769069

Durch das enthaltenen Beispiel im 2. Webcast bekommt man meiner Meinung nach auch einen guten Einstieg!

Gruß, Andi!

Danke für die bisherigen Antworten.
Habe testweise folgendes versucht:

  1. Eine neue Projektmappe erstellt (MyRessources)
  2. C#-Klassenbibliothek hinzugefügt (MyRessources.User)
  3. Klasse User erstellt


namespace MyRessources.User
{

  public class User
  {
   public User() {...}

   public void addUser() {...}

   ...
  }

}

  1. Einen Verweis auf MyRessources.User.dll im MainProjekt (1) eingefügt

  2. using MyRessources.User; im MainProject eingefügt

  3. Hier Fehler: MyRessources.User = new ----> ICH KANN HIER KEINE INSTANZ VON USER ERZEUGEN, sondern nur MyRessources.{Namespace}

Frage: Wie kann ich die Klasse User aus dem Namespace "MyRessources.User" im Namespace "mainProject" über den Aufruf User test = new User() aufrufen.

Wie ich das bisher verstanden habe erreiche ich das doch gerade über den Verweis und den using-Aufruf, oder?

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

Kannst Du mal Deine Fehlermeldung posten?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Frage: Wie kann ich die Klasse User aus dem Namespace "MyRessources.User" im Namespace "mainProject" über den Aufruf User test = new User() aufrufen.

Wie ich das bisher verstanden habe erreiche ich das doch gerade über den Verweis und den using-Aufruf, oder?

was hast du denn bei dir als "using" stehen?
using MyRessources.User ??

?( wer suchet, der findet auch! :]

Fehlermeldung:
error CS0246: Der Typ oder Namespace 'User' konnte nicht gefunden werden. Möglicherweise fehlt eine Anweisung oder ein Assemblyverweis.
error CS0118: 'pim.newUser' deutet auf 'Klasse' hin, wo 'Variable' erwartet wurde

using MyRessources.User;

und Aufruf:

MyRessources.User.User newUser = new MyRessources.User.User(...)

funktioniert. Ich möchte aber nicht jedesmal den kompletten Verweis vorschreiben, sondern nach setzen des Verweises und eines entsprechenden using Eintrages einen Aufruf User test = new User() machen können.

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

Sieht eigentlich soweit ok aus, vielleicht ein typo im using-Statement?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Workaround 🙂 Habe gerade nochmal die komplette Projektstruktur neu angelegt. Jetzt scheint es zu klappen. Habe bestimmt irgendwo einen falschen using-Eintrag eingefügt. Teilweise die "Suche der Nadel im Heuhaufen".

Danke für die schnelle Hilfe

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

Hallo wds

Konrad Zuse als Avatar. Auch nett. Und so bescheiden. 🙂

herbivore

[offtopic2]
Na klar 🙂 Entschuldige, dass ich bei den ganzen bunten Avataren hier im Forum nur ein Schwarz-Weiss-Bild von mir habe 😉[/OFFTOPIC2]

wds

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse