Ich habe Probleme, meine Klassen und Dienste richtig zu benennen, wenn Utils und andere Hilfeklassen beteiligt sind.
Wie würden Sie Folgendes strukturieren:
EventService.cs
EventServiceUtils.cs
EventServiceValidators.cs
EventServiceCoordinator.cs
etc...
Ich habe mehrere Dienste mit den gleichen Anforderungen wie der oben genannte Dienst. Ein Gedanke ist, all dies in einen geeigneten Namespace zu unterteilen, so dass es ungefähr so aussieht:
Services.EventService.EventService.cs //(the actual service)
Services.EventService.Validators.DateValidator.cs
Services.EventService.Validators.ParticipantValidator.cs
Services.EventService.Coordinators.ParticipantCoordinator.cs
Services.EventService.ExtensionMethods.Extensions.cs
und so weiter. Jeder Namespace ist natürlich ein eigener Ordner. Dies fühlt sich jedoch nicht 100% ig an, da es wahrscheinlich mehr DateValidators
in den anderen Diensten gibt, was leicht zu einem unerwünschten Verweis führen kann.
Und das Services.EventService.EventService.cs
schließt auch den Klassennamen in den Namespace ein, was auch nicht gut ist. Sie könnten verwenden Services.Event.EventService.cs
, aber es gibt natürlich bereits eine Entität mit diesem Namen.
Dies ist das Domain-Modell.
quelle
Antworten:
Ich denke, das Beste, was Sie tun können, um Ihren Namespace zu verbessern, ist, ihn
Service
aus IhremEventService
Namespace zu entfernen . Ich würde die Namespaces auch so anpassen:Ich denke immer noch, dass dies eine Verbesserung gebrauchen könnte.
Früher mochte ich Namespaces, aber heute denke ich, dass weniger mehr ist. Wenn Sie Ihre Namespaces tief verschachteln, wird der Code möglicherweise zu ausführlich, und die Aufschlüsselung der Elemente führt zu einer weitaus geringeren Vererbbarkeit. In Ihrem Code
DateValidator
könnte eine Klasse beispielsweise problemlos an anderer Stelle verwendet werden, sodass sich nicht viele Namespaces darüber befinden sollten, da andere Dienste als der EventService jetzt eine DateValidator-Klasse nutzen können. Gleiches gilt für die Erweiterungsmethoden. Es gibt keine Zeit (die ich sehen kann), in der Sie alle Ihre Erweiterungsmethoden gleichzeitig sehen müssen, daher ist es sinnvoller, sie mit der Sache zu gruppieren, auf die sie sich bezieht. In diesem Fall sindEventExtensions
wahrscheinlich Links zu IhrerEventService
, also logischerweise sollten sie meiner Meinung nach zusammen sitzen.quelle
Warum lesen Sie nicht die allgemeinen Namensrichtlinien und Namensrichtlinien für Namespaces von Microsoft, um einem universellen Muster zu folgen?
Ich denke, die Formel
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
funktioniert gut.quelle
Das richtige Namespace-Design berücksichtigt sowohl das logische als auch das physische Design.
Obwohl die ursprüngliche Begründung für Namespaces in erster Linie darin bestand, Namenskonflikte zwischen Objekt- und Methodennamen zu vermeiden, ist sie zu einem wichtigen Element der gesamten Lösungsarchitektur und -gestaltung geworden. Sie möchten nicht nur, dass Ihre konzeptionelle Hierarchie und Ihr logisches Design sinnvoll sind, sondern auch, dass Ihr Code ordentlich in gut gestalteten und leicht wiederverwendbaren Bibliotheken verpackt wird, die später problemlos in andere Projekte und Produkte integriert werden können. Das ist vielleicht eher das gewünschte Ergebnis eines guten physischen Designs.
Sehen Sie sich das .NET Framework an und erfahren Sie, wie Einheiten verwandter Funktionen in Assemblys mit angemessener Größe bereitgestellt werden. Sie können eine Referenz und eine using-Anweisung einfügen und haben plötzlich relevante Funktionen zur Verfügung, ohne eine beliebige Anzahl von Küchenspülen einziehen zu müssen. Dies liegt daran, dass das physische Design von .NET Framework - einschließlich des intelligenten Namespaces - logisch zusammengehörigen Code in physisch zusammengehörigen bereitstellbaren Einheiten gepackt hat. Durch das Erstellen einer hervorragenden Zuordnung zwischen Namespaces und Assemblys haben die Architekten und Entwickler des .NET-Frameworks von Microsoft Ihre Arbeit erheblich erleichtert (einige mögen sich vielleicht anders auseinandersetzen, aber ich bin ziemlich zufrieden mit dem, was sie getan haben).
Namespaceing in C # ist eigentlich eher willkürlich. Sie können Namespaces an den ungewöhnlichsten Stellen platzieren, in Assemblys, die weit voneinander entfernt sind. Jede hilfreiche Disziplin in diesem Bereich ist wirklich Ihr persönlicher Beitrag zu einem gut organisierten Softwareprodukt. Ich würde es nicht wagen, Ihnen genau zu sagen, was in jedem Fall zu tun ist. Mit dieser Antwort möchte ich Sie dazu bringen, sich bei der Definition Ihrer Namespaces Gedanken über das physische und das logische Design zu machen. Je mehr Sie die Dinge logisch miteinander verknüpfen und (physisch) bereitstellen, desto einfacher wird es später, sowohl für Sie als auch für andere, die sich eines Tages mit Ihrem Code befassen müssen.
Denken Sie also bitte darüber nach, wie Ihr Code in Baugruppen und Komponenten verpackt wird, wenn Sie Ihre Namespace-Probleme lösen!
quelle