Laden...

Nomenklatur Frage: Klassenname == Propertyname?

Erstellt von Seikilos vor 13 Jahren Letzter Beitrag vor 12 Jahren 10.816 Views
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren
Nomenklatur Frage: Klassenname == Propertyname?

Hallo,

ich refaktorisiere gerade ein wenig und habe nun eine .cs Datei die FormManager heißt, darin ist eine Klasse die FormManager heißt.

Nun habe ich eine Klasse, die ein Property des Typs FormManager braucht. Üblicherweise sind Properties ja groß geschrieben, was bei mir zu dem Ergebnis führt, dass ich folgendes habe:

 public FormManager FormManager { get; private set; }

Tja, Klasse und Instanz heißen hier gleich, was nicht geht. Aber ich finde den Klassennamen so eindeutig, dass die Instanz auch so heißen sollte, da ein public Property aber nun mal groß geschrieben wird, habe ich ein Problem.

Wie macht ihr so etwas? Ich will ungern die Instanz als "Forms" bezeichnen, weil ich gerade gemerkt habe, dass alleine das Wochenende dazwischen gereicht hat, um die Verbindung zwischen dem Namen und der Tatsache, dass es ein Manager ist, zu vergessen.
(Es war kein Alkohol im Spiel 😃 )

Life is a short

656 Beiträge seit 2008
vor 13 Jahren

Zum Glück ist C# was das angeht äußerst ausführlich und präzise definiert - daher kein Problem aus Compiler-Sicht, wenn du das ganze genau so schreibst.

Alles andere ist, wie so oft im Leben, einfach nur Geschmackssache.

2.187 Beiträge seit 2005
vor 13 Jahren

Hallo Seikilos,

Benutze einfach den FullQualifiedName von deinem FormManager, dann kannst du das Property sicher ohne Probleme "richtig" benennen.
((Falls der FormManager im Namespace Seikilos liegen würde:))


public Seikilos.FormManager FormManager { get; private set; }

Gruß
Juy Juka

1.665 Beiträge seit 2006
vor 13 Jahren

Ich finde es etwas unsinnig, Properties nach ihrem genauen Zweck zu benennen, wenn die Klasse schon einen Teil vorgibt.

Klasse "Form" -> Propety "Manager".

Edit:

Benutze einfach den FullQualifiedName von deinem FormManager

Das Problem liegt hier zwischen Klasse und Propertyname (und nicht Typ).

  • Soweit ich mich erinnere (kanns grad nicht testen).
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Danke für euer Feedback. Ich werde es mal so versuchen.

@JunkyXL: Ich habe leider nicht verstanden was du meinst.

Life is a short

1.665 Beiträge seit 2006
vor 13 Jahren

Wenn du ein Property in deiner Form-Klasse hast, muss es nicht noch mit Form... im Namen beginnen. Das hat eine gewisse Zweideutigkeit. So sehe ich das.

5.742 Beiträge seit 2007
vor 13 Jahren

... wobei solche Namenszusätze wie "Manager" namenstechnisch nicht gerade allzu auskunftsfreudig sind 😉

U
282 Beiträge seit 2008
vor 13 Jahren

... wobei solche Namenszusätze wie "Manager" namenstechnisch nicht gerade allzu auskunftsfreudig sind

Siehe http://www.classnamer.com/. Ein Page-Refresh gibt einen neuen Namen.

R
234 Beiträge seit 2007
vor 13 Jahren

Siehe
>
. Ein Page-Refresh gibt einen neuen Namen.

Was für eine super Seite. "RecursiveLolcatModule" 😁

2.298 Beiträge seit 2010
vor 13 Jahren

Sehe den Sinn der Website irgendwie nicht... Ich mein Zufallsklassennamen bringen einen doch kein Stück weiter... schon garnicht Klassennamen wie: MultipleCacheFactoryFactory

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

5.742 Beiträge seit 2007
vor 13 Jahren

Ich mein Zufallsklassennamen bringen einen doch kein Stück weite

Eben! Die generierten Klassennamen (bzw. die Prä- und Suffixe) sind meistens absolut nichtssagend. Nur leider werden solche "Anhängsel" wie "Manager", etc. dennoch in der Praxis gern verwendet.

1.820 Beiträge seit 2005
vor 13 Jahren

Hallo!

offtopic:
Wenn man nicht genau weis, was es macht, nennt man es Manager (trifft nicht nur auf Software zu)

Nobody is perfect. I'm sad, i'm not nobody 🙁

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Seikilos,

mir scheint die Antwort von BhaaL etwas untergegangen zu sein. Der Code

public class C
{
   public FormManager FormManager { get; private set; }
}

kompiliert wunderbar. C# kann also durchaus zwischen dem Namen des Typs der Property und dem Namen der Property unterscheiden.

Nur bei

public class FormManager // <== hier
{
   public FormManager FormManager { get; private set; }
}

gibt es was auf die Finger:

Fehlermeldung:
error CS0542: "FormManager": Membernamen dürfen nicht mit dem Namen des sie einschließenden Typs identisch sein.

Das hat aber nichts damit zu tun, dass der Name des Typ der Property und der Name der Property nicht identisch sein dürfen, sondern dass man in der Klasse FormManager keine Property gleichen Namens definieren darf, egal wie der Typ der Property ist, weil der Name der Klasse innerhalb der Klasse dem Konstruktor vorbehalten ist.

Meines Erachtens macht es auch keinen Sinn, in der Klasse eine Property mit dem Namen der Klasse zu haben. Wieso hat die Klasse eigentlich eine Instanz von sich selbst? Weil sie ein Singleton ist? Dann sollte die Property eher Instance heißen.

herbivore

Gelöschter Account
vor 13 Jahren

Meines Erachtens macht es auch keinen Sinn, in der Klasse eine Property mit dem Namen der Klasse zu haben. Wieso hat die Klasse eigentlich eine Instanz von sich selbst?

Hmm, das ist so nicht gesagt das es eine Instanz von sich selbst ist.

Ich muss auch zugeben, ich habe auch oft das Problem das ich eine Klasse schreibe und diese bestmöglich benenne. Direkt im Anschluss verwende ich ein Objekt der Klasse als Property und stelle fest das der Name der Klasse eigentlich der perfekte Property Name ist, dann benenne ich die Klasse gerne nochmal um da ich die Namesgleichheit von Typ und Propertyname ebenfalls nicht gut heisse.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Sebastian.Lange,

das ist so nicht gesagt das es eine Instanz von sich selbst ist.

ich finde schon, denn nur dann tritt ja mit dem geposteten Code ein Fehler auf. Siehe meinen Beitrag weiter oben. In Kurzform: Der Name des Typ einer Property und der Name der Property dürfen gleich heißen, aber es darf keine Property so heißen, wie die umgebende Klasse. Da nun der Typ der Property genauso heißen soll, wie die Property selbst (was er ja darf), reden wir also wohl darüber, dass eine Klasse eine Property vom Typ der Klasse selbst enthält.

Hallo zusammen,

vom konkreten Fall abgesehen, erlaubt nicht nur der Compiler Propertys bei denen Name und Name des Typs übereinstimmen, sondern sie sind auch nach den Namenskonventionen durchaus erlaubt, allerdings mit klarem Fokus auf Enumerationen und davon wird auch im .NET-Framework an verschiedenen Stellen Gebrauch gemacht.

Möglicherweise empfiehlt es sich, für eine Eigenschaft den gleichen Namen wie für ihren Typ festzulegen.

Wenn eine Eigenschaft eine starke Typisierung als Enumeration aufweist, kann der Name der Eigenschaft mit dem Namen der Enumeration übereinstimmen. Wenn beispielsweise der Name einer Enumeration CacheLevel lautet, kann eine Eigenschaft, die einen der Enumerationswerte zurückgibt, ebenfalls CacheLevel lauten.

Für Parameternamen (und m.E. lässt sich das auch auf die meisten Fälle von Variablen- und Propertynamen generalisieren) gilt das Umgekehrte:

Verwenden Sie Namen, die auf der Bedeutung des Parameters und nicht auf dem Typ des Parameters beruhen.
Der Typ des Parameters wird i. d. R. in Entwicklertools und der Dokumentation angegeben. Wenn Sie einen Namen wählen, der die Verwendung oder Bedeutung des Parameters beschreibt, geben Sie Entwicklern wertvolle Informationen an die Hand, die ihnen das Identifizieren des richtigen Members für ihre Aufgabe und der geeigneten Daten zum Übergeben an den Member erleichtern.

Verwenden Sie beschreibende Parameternamen.

In den meisten Szenarien sollten der Name des Parameters und sein Typ ausreichen, um die Verwendung des Parameters zu bestimmen.

Es ist also immer eine Abwägungsfrage.

herbivore

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Hallo alle,
danke für die ausführliche Erklärung.

Es ist in der Tat so, dass das Property nicht teil der eigenen Klasse ist, sondern von einem Manager (scherz 😄)

Ich glaub mein Fehler lag darin, dass ich der vorkompilierten Sicht von Visual Studio vertraut habe. Das Property hatte ich auch erzeugt, bei der Initialisierung habe ich
"FormManager =" geschrieben und er hat mir das Property gehighlighted, als wäre es eine Klasse (also in den Standardeinstellungen blau dargestellt)
Da hab ich es nicht weiter versucht, weil es schon nach einem Fehler aussah.

Nun, dem wahr wohl nicht so 😃

this. hätte ich auch mal testen können.

Naja, nun weiß ich auf jeden Fall sicher, dass es geht und auch nicht ein Designfehler von mir wäre, wenn ich das mache 😃

Danke

Edit: Bezüglich des MSDN Ausschnitts: Bei mir beschreibt FormManager auch seine Funktion. Er instantiiert und verwaltet alle Dialog und Formen in der Anwendung.
Gibt es da einen treffenderen Namen?

Life is a short

1.665 Beiträge seit 2006
vor 13 Jahren

Wenn dem so ist, dann hat der aber nix innerhalb einer Form zu suchen. Ich würde diesen "Manager" eher statisch in der Anwendung bereitstellen, worauf sich dann jede Form beim Instanziieren registriert.

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Der ist auch nicht in einer Form, er ist ein einer Plugin-Einsprungspunkt Klasse, die alle Ressourcen verwaltet

Life is a short

A
764 Beiträge seit 2007
vor 12 Jahren

Wie lustig ich habe diesen Beitrag erst nicht gefunden und angefangen ein neues Thema zu erstellt: Namensgebung: Property-Name == Klassenname
Das habe ich dann nochmal in die Suche reinkopiert und das hier gefunden.

Was ich noch nicht verstanden habe, wie könnten denn alternative Namensgebungen sein. Nehmen wir einfach ein Beispiel:

_class Auto _und class Garage

Bei einer DoppelGarage würde ich das Property List<Auto> Autos verwenden, oder LinkesAuto, RechtesAuto.

Bei einer Einzelgarage würde ich das Property Auto nennen, also genauso wie die Klasse. Aber wie wäre die Alternative dazu? Anderer Klassenname? Oder AutoInstanz oder wie oder was?

Gruß, Alf

http://www.classnamer.com/
👍 👍 😁

5.742 Beiträge seit 2007
vor 12 Jahren

Aber wie wäre die Alternative dazu? Anderer Klassenname? Oder AutoInstanz oder wie oder was?

Wie sagt man so schön:

There are only two hard problems in Computer Science: cache invalidation, naming things and off-by-one errors

In diesem Fall also das zweite 😉

Spontan würden mir jetzt Inhalt (eher geeignet in Garagen, die auch Fahrräder etc. zulassen) oder AbgestelltesAuto einfallen.

A
764 Beiträge seit 2007
vor 12 Jahren

There are only two hard problems in Computer Science: cache invalidation, naming things and off-by-one errors

Hahaha 😁

Spontan würden mir jetzt Inhalt (eher geeignet in Garagen, die auch Fahrräder etc. zulassen) oder AbgestelltesAuto einfallen.

Das ist doch schon mal was und ich glaube auch der Weg in die richtige Richtung, weil Property und Klasse sollten imho nicht gleich heißen, auch wenns geht.
Für meinen Problem passt das abgestellte Auto sehr gut. Vielen Dank!

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Alf Ator,

zur Technik möchte ich nochmal auf mein ersten Beitrag weiter oben verweisen. In der Klasse Garage kann man ohne weiteres eine Property Auto vom Typ Auto deklarieren. Eine alternative Namensgebung ist also aus technischen Gründen gar nicht nötig (also AbgestelltesAuto), sondern nur aus inhaltlichen Gründen (also Inhalt, weil in der Garage nicht nur (genau) ein Auto abgestellt werden kann). Zur inhaltlichen Namensgebung möchte ich nochmal auf mein zweiten Beitrag weiter oben verweisen.

herbivore