MB: MVC Erzeugung? / vorgefertigte Applikations Lösungen lohnen? (MEAN Stack)

moin Community,

Wie erzeugt man die einzelnen MVC Klassen in TypeScript bei größeren UI Applikations-Projekten? Ich habe drei Methoden kennen gelernt die ich hier zum Teil erwähnt habe router.

  • vorab Laden der SPA Klassen über einen fest definierten Pfad und in einem Kontainer gespeichert worauf man über ein Schlüsselwort zugriff hat und sie instanziieren kann
Router.set( 'home' : { 'model' : HomeModel, 'view' : HomeView, 'controller' : HomeController } )
let home : IClass = Router.get( 'home' ).controller;
new home;
  • bei Bedarf laden und Erzeugung über dynamisch definierten Pfad (Ich denke bei großen SPAs üblich)
let Model : IClass = require( model . DS . model );
new Model`
  • Das Laden und Erzeugen der Klassen von Anfang an(bei sehr kleinen SPAs nehme ich an).
import HomeModel from 'models/HomeModel.ts';
this.homemodel : IClass = new HomeModel;`

Neben bei Bemerkt habe ich gehört das MEAN Stack eine gute simple alternative sei mit sehr geringem Aufwand zu implementieren. Jedoch brauch man dafür nehme ich an sehr viele PlugIns und Aufgrund ihres Umfanges sehr rechen intensiv sind. Dazu bräuchte es ein großes Datenaufkommen mit einer ausgefeilten UI nehme ich an. Deswegen habe ich mich grundsätzlich gegen Microsoft Express und Google Angular entschieden weil man nur paar Funktionen benötigt. War diese Entscheidung richtig? Ich gerate massiv in Kritik und bin mir da zunehmend unsicher.

Nebenbei wäre Ich da für eine Bekräftigung meiner Sache aber auch schlüssiger Kritik sehr, sehr Dankbar.

vlg MB

  1. Tach!

    Wie erzeugt man die einzelnen MVC Klassen in TypeScript bei größeren UI Applikations-Projekten?

    Unbefriedigende Antwort: So wie man es braucht.

    Ich habe drei Methoden kennen gelernt die ich hier zum Teil erwähnt habe.

    • vorab Laden der SPA Klassen über einen fest definierten Pfad und in einem Kontainer gespeichert worauf man über ein Schlüsselwort zugriff hat und sie instanziieren kann

    Warum möchtest du Instanzen erstellen, und vermutlich irgendwelchen globalen Variablen oder quasi-globalen Variablen innerhalb deines Scopes zuweisen, wenn du sie am Ende gar nicht brauchst? (So scheint es mir zumindest.) Der Router ermittelt eine Klasse (oder auch mehrere, wenn es erforderlich ist), instantiiert genau diese und übergibt die Steuerung an genau diese. Fertig.

    • bei Bedarf laden und Erzeugung über dynamisch definierten Pfad (Ich denke bei großen SPAs üblich)
    • Das Laden und Erzeugen der Klassen von Anfang an(bei sehr kleinen SPAs nehme ich an).

    Ob klein oder groß spielt keine Rolle. Es ist in jedem Fall nicht sinnvoll, nicht benötigte Instanzen zu erstellen.

    Neben bei Bemerkt habe ich gehört das MEAN Stack eine gute simple alternative sei mit sehr geringem Aufwand zu implementieren. Jedoch brauch man dafür nehme ich an sehr viele PlugIns und Aufgrund ihres Umfanges sehr rechen intensiv sind.

    Das ist lediglich eine Vermutung. Viel Code bedeutet zuerst einmal nur viel Arbeit für den Parser/Compiler, also den Teil, der den Code initial laden und analysieren muss. Meist merkt man davon aber nicht viel. Was dann am Ende davon ausgeführt wird, steht auf einem anderen Blatt. - Vorausgesetzt, man hat nicht unnötigerweise Instanzen von Dingen erzeugt, die gar nicht verwendet werden.

    Dazu bräuchte es ein großes Datenaufkommen mit einer ausgefeilten UI nehme ich an. Deswegen habe ich mich grundsätzlich gegen Microsoft Express und Google Angular entschieden weil man nur paar Funktionen benötigt. War diese Entscheidung richtig?

    Ja, nein, vielleicht. Ohne die Größe deines Projekts zu kennen, kann man das nicht einschätzen. Bei Eigenentwicklung hast du den Aufwand, für alle Features, die dir vorab eingefallen sind und für alle Features, für die sich im Laufe der Anwendungserstellung erst der Bedarf abzeichnet, den Code selbst zu schreiben. Das kann kürzer sein, als sich in ein Framework einzuarbeiten, aber das kann genausogut auch nur am Anfang so aussehen, wenn man sich unterschätzt hat, wieviel Zeit man doch dafür aufwenden muss, das Rad nachzuerfinden und solange zu schleifen, bis es rund ist.

    Ich gerate massiv in Kritik und bin mir da zunehmend unsicher.

    Und wenn du da ins Schussfeld gerätst, ist es dann von mir richtig vermutet, dass da noch andere mit deiner Entwicklung arbeiten sollen? Wenn ja, die können dann auch nicht bereits vorhandenes Wissen im Umgang mit anderen Frameworks anwenden, sondern müssen sich in dein Framework einarbeiten, was auch wieder Zeit erfordert, und gegebenenfalls mühsam ist, weil du andere als gängige Konzepte verwendest. Besonders fatal ist dabei, wenn man keine Erfahrungen im Umgang mit den anderen Frameworks hat, und so auch nicht weiß, was bei denen sehr gut läuft und was verbesserungswürdig ist, um dann in der Eigenkreation die guten Konzepte zu übernehmen und die schlechten zu meiden.

    dedlfix.

    1. Hallo dedlfix,

      Vielen Dank für die Antwort! Das ist eine echte Hilfe!

      Wieso brauch man keine Instanzen wenn man Daten in Klassen benötigt um sie anzuzeigen? Statische Klassen habt ihr mir abgeraten zu verwenden. Vermutlich habe ich dich - wie öfters - falsch verstanden. Ich habe tunlichst keine globalen variablen verwendet.

      vlg MB

      1. Tach!

        Wieso brauch man keine Instanzen wenn man Daten in Klassen benötigt um sie anzuzeigen?

        Man braucht sie, wenn man sie braucht (auch wieder unbefriedigend beantwortet). Mir klang es in deiner Fragestellung allerdings so, als dass du die Klassen alle mal instantiierst, egal ob du sie am Ende brauchst oder nicht, statt dass du die Instantiierug erst dann vornimmst, wenn sie nötig wird und nur für die benötigten Dinge. Kann aber auch fehlinterpretiert gewesen sein.

        Statische Klassen habt ihr mir abgeraten zu verwenden.

        Es wird nicht besser, wenn man statt einer statischen Verwendung eine Variable definiert, die dann ebenfalls nur in der gleichen statischen Weise wie zuvor verwendet wird. Dann kann man das auch statisch lassen. Beispiel ist das Math-Objekt. Eine Instanz zu erzeugen, um Methoden wie sin() zu verwenden macht es nicht besser, als gleich statisch Math.sin() zu nehmen. (Nur mal so angenommen, man könnte von Math Instanzen erstellen.)

        Vermutlich habe ich dich - wie öfters - falsch verstanden. Ich habe tunlichst keine globalen variablen verwendet.

        Vielleicht. Man vermeidet globale Variablen, um Konflikte mit gleichlautenden Bezeichnern aus andere Programmteilen zu vermeiden. Zieht man sich sozusagen lediglich in einen eigenen Scope zurück, arbeitet dann aber genauso wie vordem im globalen Scope, wird es nicht grundlegend besser, weil man dabei anscheinend nicht verstanden hat, warum man den Scope erzeugt hat. Vermutlich fehlt dann generelle Struktur und ein Konzept, wie man mit Scopes seine Namensräume bildet, und was man darin kapselt.

        Ich kann dir jetzt auch nicht ein allgemeingültiges Konzept präsentieren, das für alle Anwendungsfälle passt. Ich kann dir aber nochmals empfehlen, erstmal bei den anderen Großen zu schauen, wie die das machen, bevor du mit nur wenig Erfahrung mit Eigenkreationen anfängst.

        dedlfix.

        1. Hallo Dedlfix,

          ja ich hab Informationen konzeptionell sowie programmiertechnisch eingeholt und versucht diese gewonnen Informationen in einem eigenen Projekt anzuwenden.

          vlg MB