Designfrage => Große Klasse!



  • Hallo Leute,

    ich habe eine Klasse "Foo", welche viele Aspekte vereint.

    Ich habe aufgrund des viele Codes, die Klasse in partielle Aspekte gesplittet.

    File Foo.cs

    partial class Foo { /*Ctoren usw*/}
    

    File Foo.AspektA.cs

    partial class Foo : IAspektA{...}
    

    File Foo.AspektB.cs

    partial class Foo : IAspektB{...}
    

    File Foo.AspektC.cs

    partial class Foo : IAspektC{...}
    

    aber mir gefällt das nicht,

    habe mir dann überlegt , sowas

    class Foo
    {
      IAspectA AspectA {get { GetOrCreateAspect(this);}}
    IAspectB AspectB {get { GetOrCreateAspect(this);}}
    IAspectC AspectC {get { GetOrCreateAspect(this);}}
    }
    

    zu machen! quasie eine Mixed In pattern.

    Was meint ihr, gibts andere Pattern.. is das schon OverIngeniering oder Still frage!?

    DAnkee 😃



  • "Mixed In" hab ich noch nie gehört.
    Falls du "Mixin" meinst, das ist so ziemlich das Gegenteil von dem was du zeigst.

    Davon abgesehen... mir ist das ganze zu abstrakt. Was sind AspektA, AspektB etc?



  • Ja "Mixin" 🤡

    ja ist schwer zu erklären .. Aspekte sind "Funktion" welche miteinander wenig in Verbindungen stehen, aber den gleichen Kontext "Foo" verwenden, und dessen Eigenschaften verändert können.

    Aber das stimmt, is Abstakt.. ich versuche das nur etwas zu kapseln, damit ich eben nicht so viel code in einer Klasse habe...



  • Wenn eine Klasse zu groß und unübersichtlich wird, dann mach mehrere kleinere draus. Wie du das konkret machst, das kommt auf die Situation an. Du könntest eine Klasse machen, die IAspektA implementiert, eine für IAspektB usw.

    Wenn das nicht geht, weil die Aspekte zuviel Überschneidung haben, dann sind möglicherweise die Aspekte ungünstig definiert und sollten geändert werden.

    Wenn das die "große Masterklasse" ist, in der alle Fäden zusammenlaufen: Möglicherweise ist das einfach so. Vielleicht kannst du aber trotzdem Teile voneinander abgrenzen, so dass dazwischen halbwegs übersichtliche Klassen-APIs entstehen.



  • NullBockException schrieb:

    Aspekte sind "Funktion" welche miteinander wenig in Verbindungen stehen, aber den gleichen Kontext "Foo" verwenden, und dessen Eigenschaften verändert können.

    Sowas in der Art hab ich fast erwartet. Ist bloss immer noch viel zu abstrakt.


Anmelden zum Antworten