Laden...
U
Unfug
myCSharp.de - Member
42
Themen
133
Beiträge
Letzte Aktivität
vor 2 Jahren
Dabei seit
25.07.2006
Erstellt vor 3 Jahren

Ok Danke.
Noch Ergänzend:

Dieses Video zeigt auch nochmal sehr genau wie was worum es geht. Kann ich jedem nur empfehlen, der sich damit auseinandersetzen möchte.
Introduction to Comet and MVU - YouTube

Erstellt vor 3 Jahren

Hallo @Abt,

Danke. Im Grunde, glaub ich, kann ich alles nachvollziehen.
Aber eine Nachfrage habe ich doch noch:

MVU ist ja nur ein Pattern und MVVM ist ja auch kein Muss bei WPF. Wieso kann man nicht sagen, dass wenn ich ein Model habe, dass ich an ein eine WPF-View übergebe, dort nur One-Way Binding mache (nur anzeigen) und dann hinter jedem Button/Click eine Methode baue die mir


Model With { Property: NeuerWert }  //Syntax jetzt nur exemplarisch aus Records geklaut. 
RenderKompletteUINeu()

macht, dieses als MVU bezeichnen? Im Grunde ist es doch genau das.
Das kann ich auch auf ASP oder alle anderen Sprachen übertragen. Ich rendere einfach mein ViewModel und jede Änderung führt dazu, dass das Model geupdatet wird und dann wird die UI komplett neu gerendert (statt wie bei Blazor und MAUI MVU nur Teile neu gerendert werden).
In der Theorie ist doch genau das MVU. Oder liege ich hier falsch?.

Erstellt vor 3 Jahren

Hallo myCSharp,

ich hatte die Suche verwendet aber noch kein Thema zum MVU Pattern gefunden.
Um ehrlich zu sein kenne ich die üblichen verdächtigen Seiten. Für mich am einfachsten war das Tutorial.
https://guide.elm-lang.org/architecture/

ELM nutzt ja MVU. Und das kommt jetzt so langsam in MAUI an. Blazor wirkt ebenfalls wie eine Art MVU.

Was ich aber absolut nicht verstehe ist: Wo ist denn die Neuheit? Das mein ich nicht auf eine arrogante Art und Weise, sondern ich verstehe es wirklich nicht.
Für mich liest sich MVU, dass man einfach die UI neu rendert nach jeder Anpassung des Models.
Diese Vorgehensweise gibt es doch schon ewig. Man konnte das auch bei WPF so machen oder Winforms oder ASP.
Und alles in einer Update Methode zu verarbeiten statt mehrere Code Behind EventHandler - ok..meinetwegen. Aber bringt das jetzt wirklich was?
Was Blazor macht ist, nur den Teil neu zu rendern, der sich geändert hat - was ja richtig richtig cool ist. Aber das kann damit ja nicht gemeint sein.

Die Tatsache, dass immer bewusst der Begriff ViewModel wegelassen wird bei den Erklärungen führt zu einer weiteren Frage.
Wenn ich zwei Models habe wie:

Person { Nummer, Alter, Name}
Arbeit {PersonNummer, Position}
und beide in der selben UI verwenden möchte, dann macht es doch einfach Sinn ein ViewModel zu erstellen
ViewModel { Nummer, Alter, Name, Position} und dieses bei MVU zu nutzen. Doch dann wären wir bei MVVMU .

Vielen Dank für eure Erfahrungen und Erklärungen

Erstellt vor 3 Jahren

Klingt irgendwie unsinnig, die Daten, die übertragen werden, bekommt doch sowieso nur der Client zu Gesicht
Oder gehen die Daten an einen anderen Client? Dann ergäbe das mehr Sinn.

Ja. Erneut korrekt. Wir hätten auch alles verschlüsselt übertragen, um dann auf dem Client auszuwerten. Aber auch das war/ist nicht gewünscht. Es sind Vorgaben an denen man sich halten muss. Der technologische Blick hat hier überhaupt keinen Einfluß. Es ist einfach die politische Haltung.

Kein eigener Serializer, die können das doch alle ^^ Aber ja, zumindest so ungefähr, dein Beispiel sind ja ziemlich leicht analysierbar aus.
Der System.Text.Json.JsonSerializer kann auch zum **JsonNode serialisieren, daraus kannst Du dann entfernen, was Du willst **und vom Ergebnis den String erzeugen lassen.

Danke. Das probiere ich mal aus.

Erstellt vor 3 Jahren

Aber kann der Client nicht selber definieren, welche Daten er zurück bekommt?
Dann kann es auch ein potentieller Angreifer machen und die Daten abgreifen.

Ja das ist korrekt.
Der Kunde soll mit Hilfe einer UI in seiner Client Software angeben welche Daten er benötigt.
Zum Beispiel


Mensch.Kind.Spielzeug.Hersteller.Name
Mensch.Kind.Spielzeug.Farbe

Als Filterkriterium gibt er an


Mensch.Kind.Spielzeug.Hersteller.Mitarbeiter > 10

Der Server soll dann die Anfrage auswerten und erzeugt und dann eine Liste mit den ausschließlich benötigten Daten.


List
 1. Hasbro, Blau
 2. Mattel, Grün
 3. Hasbro, Gelb
 4. Habba, Orange

Bevor die Daten den Server verlassen, muss Kunde 2 den Versand bestätigen.

Theoretisch ist es möglich, dass "versteckt" auch andere Daten abgegriffen werden vom Client, aber dafür gibt es entsprechend Verträge.

Und wie Du die Rückgabedaten aufgebaut werden, hängt davon ab, wie ihr Aufbau festgelegt werden soll.
Suchen und zusammensammeln genauso wie sonst auch und beim Zurückgeben lässt Du das JSON nicht automatisch erzeugen, sondern machst es per Reflection selber, aber mit deinen Regeln. Bei Newtonsoft.Json ist das einfach, wie es bei System.Text.Json geht, weiß ich aber nicht.
Vorausgesetzt Du verwendest ein System, was sowas erlaubt, mit ASP.NET Core ist das jedenfalls kein Problem.

Ja ist alles im C# ASP.NET Core Universum. Du meinst einen eigenen Serializer bauen? Der basierend auf einem Dictionary das korrekte Property raussucht und dann dem JObject hinzufügt?

Erstellt vor 3 Jahren

JSON - bau das JSON selbst zusammen, dann hast Du maximale Freiheiten

Aber warum eigentlich? Warum muss das Ergebnis so genau spezifiziert werden?
Überleg dir, welche Daten üblicherweise zusammen gehören und liefere die immer als Ganzes zurück, die Client kann sich ja das raus picken, was er braucht.

Danke für deine Antwort. Um deine Fragen zu beantworten: Aus datenschutzrechtlichen Gründen. Jede Anfrage/Job die gestellt wird verlangt bestimmte Daten zurück, die vorerst genehmigt werden. Es ist also nicht erlaubt das komplette Datenmodell zurückzuliefern und dann auf dem Client zu filtern. Client und Server sind unterschiedliche Firmen.

Bzgl. JSON: Wie würdest Du denn beim Server die Daten zusammensuchen und dann setzen, falls man nur ein bestimmtes Property übertragen möchte alle anderen aber nicht?

Erstellt vor 3 Jahren

Hallo zusammen,

ich hoffe Ihr hattet ein schönes Weihnachtsfest. Ich habe eine Frage die mich derzeit beschäftigt und ich auf keinen grünen Zweig komme. Vielleicht könnt ihr mir hier wieder ein paar Denkanstöße geben.

Gegeben ist eine feste Datenstruktur auf Serverseite, die mit dynamischen Anfragen (Rest?) abgefragt werden soll. Neben dem Filter soll auch mitgegeben werden, was zurückgeliefert werden soll.

Etwas technischer

Client - Server Architektur.

Der Server verwaltet eine Datenstruktur die relativ komplex ist.
Als Beispiel ein Datenmodel:


Mensch
  Kind
      Spielzeug
             Preis
             Farbe
             Hersteller
                     Name
                     Herkunftsort
                     Mitarbeiter

Die Tiefe der Propertys ist enorm. Es sind Listen dabei, einfache Arrays, String, Int etc etc.

Nun ist folgendes geplant:
Der Client sendet eine Anfrage an den Server wie z.B.
"Liefere mir nur den Preis und die Farbe von allen Daten bei denen der Herstellername: Hasbro und Mitarbeiter > 10 ist"
UPDATE: Vermutlich wird es einen Job geben, der abgerufen wird vom Server der diese Anfrage beinhalten soll. Die Jobs werden dann regelmäßig vom Client abgerufen

Ich möchte also als Rückgabewert:


Preis
Farbe

Zusätzlich kann es sein, dass diese Anfrage noch manuell über ein UI erweitert werden muss.


Preis
Farbe
Größe (muss manuell per UI Eingabe hinzugefügt werden)

Worin liegt nun mein Problem: Die Datenstruktur des komplexen Datenmodels bleibt immer gleich, aber die Anfrage muss dynamisch sein. Der Abfragefilter soll vom Endbenutzer angepasst werden aber auch die gewünschten Rückgabewerte
So könnte die Anfrage (siehe oben) die selbe sein, aber diesmal als Rückgabewert nur


Herkunft

sein.

Was ich bisher ausprobiert habe/gelesen habe:
Für die Anfrage:
OData
eigenen Query Parser
GraphQL

Für die Rückgabe:
GraphQL

Mit GraphQL habe ich mich nicht wirklich beschäftigt. Sieht für mich nach viel Hirnschmerz aus, wenn ich mir die Beispiel anschaue.
Doch sollte dies eine Lösung sein eurer Meinung, werde ich das natürlich tun. Was ich dann nur nicht verstehe ist: Wie muss ich meine Datenstruktur aufbauen, z.B. im Client, der die Antwort erhält.
Ein Dictionary?
Wie kann ich denn im Server die Anfrage verarbeiten? Automatisch, dass ich nur bestimmte Propertys dann zurückliefere.

Freu mich über jegliche Denkanstöße.

Allen noch ein guten Rutsch

Erstellt vor 3 Jahren

Guter Tipp. Habe mit Reactive Extensions noch nicht gearbeitet. Kann das jetzt mal als Einstieg nutzen.

Das mit dem Thema State vs Business Objekte kann ich 100% nachvollziehen.
Hatte nämlich genau das Problem bei den Tests.

Aufjedenfall vielen Dank an alle. Es gab viele Anregungen, die ich jetzt testen werde. 👍

Erstellt vor 3 Jahren

Danke. Ja natürlich..das mit der Referenz .. Kopf auf den Tisch hauen. Manchmal sollte man wirklich früher ins Bett.

T-Virus:
Die Idee dahinter ist Nutzung eines sehr einfachen Eventbus wie diesen hier:
https://github.com/mxjones/RedBus
Globale Events, sollen dazu führen, dass in den Objekten verschiedene Methoden ausgeführt werden.
Es sollen als Subscribe Object.Funktionen übergeben werden die aufgerufen werden sollen.
Wenn das Object zerstört wird, dass ein EventBus.Subscribe ausgeführt hat, soll das auch aus dem Dictionary gelöscht werden, damit kein Callback hier aufgerufen wird.

Erstellt vor 3 Jahren

Hallo zusammen,

ich stehe derzeit auf dem Schlauch und hoffe, dass Ihr mir weiterhelfen könnt. Hab eine Denkblockade.

Ich füge als Value eines Dictionary ein Objekt der Klasse TestClass hinzu.
Im weiteren Verlauf setze ich dieses Objekt auf null.
Im Dictionary ist jedoch die Kopie?!/Referenz?! noch vorhanden. Ich dachte wegen Call by Referenz müsste das auch Null sein.
Geht das nicht beim Dictionary? Was wäre eine Alternative?


Dictionary<string, TestClass> list = new Dictionary<string, TestClass>();
TestClass? myclass = new();
list.Add("1", myclass);
myclass = null; //ab hier hätte ich gedacht, dass der Wert auch im Dictionary null ist.

list["1"].EineMethode(); // <<< wieso klappt das?

public class TestClass
{
	public string EineMethode()
	=> "Hello World";
}


Im echten Code übergebe ich keine TestClass, sondern Func<T,Task>.
Danke

10 von 133 Beiträgen