Abspeichern von Unterklassen in eigern Datei? Macht das Sinn?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von John422.

    Abspeichern von Unterklassen in eigern Datei? Macht das Sinn?

    Hi,

    ich habe in meinem Projekt mittlerweile etliche Klassen, empfinde aber die Art, wie sie als Dateien abgespeichert werden zunehmend unübersichtlich.

    Angenommen, ich habe eine Klasse Haus mit einer Unerklasse Zimmer, dann kann ich bei innerhalb der Haus.vb abspeichern.
    Das wird dann aber mit der Zeit eine sehr große Klasse - unübersichtlich.

    Oder ich speichere die Klasse Zimmer als eigene Datei aber dann gibt es keine hirarchische Darstellung, die mir im Dateibaum zeigt, dass das Haus die Zimmer inne hat.

    Gibt es keine Möglichkeit, das irgend wie als Haus.Zimmer.vb abzuspeichern?

    Oder mache ich etwas komplett doof?

    Viele Grüße

    John
    Bilder
    • Unterklassen.png

      26,98 kB, 604×280, 29 mal angesehen
    Moin moin

    Ich hätte es so gemacht:

    VB.NET-Quellcode

    1. '/ file: Haus.vb
    2. Public Class Haus
    3. End Class


    VB.NET-Quellcode

    1. '/ file: Zimmer.vb
    2. Public Class Zimmer
    3. Inherits Haus
    4. End Class
    Bilder
    • gebaufe-1.jpg

      93,74 kB, 343×432, 92 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Wenn ich dich jetzt richtig verstehe, dann hast du Objekte mit einer 1->N Verbindung zueinander.

    Sprich 1 Haus hat N Zimmer; jedes Zimmer gehört zu genau einem Haus.

    Dann ist es schon ganz richtig, die Klassen voneinander in versch. Dateien - oder sogar Unterordner - zu trennen. Wie @Bluespide das bereits gesagt hat.
    So bewahrst du die Übersichtlichkeit. partial-Klassen dienen eigentlich nur dazu, sehr große Klassen in logische Einheiten aufzuteilen.
    In deinem Beispiel wäre das z.B. einmal eine Haus.Zimmer.vb und eine Haus.Elektro.vb, wobei die Zimmer-Datei alle Zimmerobjekte enthalten könnte und Elektro die Elektro-Installation deines Hauses enthalten würde.
    Sie gehören aber immer noch zu derselben Klasse Haus und sich nicht voneinander verkapselt.

    Du kannst sie aber nicht voneinander erben lassen, wie @Amelie das vorschlägt, denn dann hättest du Instanzen von Haus, wo du sie nicht bräuchtest.

    Ein Zimmer gehört in ein Haus, aber es ist kein Haus - deswegen keine Vererbung des Ganzen.

    Quellcode

    1. ├── buildings
    2. │ ├── IBuilding.cs
    3. │ └── House.cs
    4. └── rooms
    5. ├── BedRoom.cs
    6. ├── LivingRoom.cs
    7. └── IRoom.cs


    Die Vererbung könnte so aussehen:



    Expandieren kann man das dann auch immer weiter, je nachdem wie granular man die Struktur möchte. Wenn man es nach Lehrbuch macht, hast du dann am Ende sogar in deinem Beispiel ein Typ ILichtSchalter, wovon dann z.B. LegrandLichtSchalter erbt, wovon dann wieder N Schaltermodelle erben.
    Im richtigen Leben macht man das aber selten so.

    Lass die Klassen ruhig innerhalb deiner Applikation private (also internal) sein, auch wenn es keinen Sinn macht, sich da großartig Gedanken zu machen.
    Nur wenn du wirklich nicht willst, das jemand deine Applikation als Lib lädt und plötzlich Zugriff auf die Klassen hat (die er sowieso über Reflections bekommen könnte).
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „siycah“ ()

    @Amelie: Dafuq? Public Class Zimmer: Inherits Haus - Inherits muss man beim Lesen durch »ist eine spezielle Art von« ersetzen können: Sportwagen Inherits Auto - Sportwagen ist eine spezielle Art von Auto, Katze Inherits Animal - Katze ist eine spezielle Art von Tier. Aber Zimmer ist keine spezielle Art von Haus. Von daher: nein.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Amelie schrieb:

    Da habe ich wohl völlig falsch gedacht...


    Dafür sind wir da ;)

    Aber ist ja auch gar nicht schlimm, wenn man hier Fehler macht. Dann wird man halt drauf hingewiesen und alle anderen können lernen.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.