VBP TestingSolution - MVVM Aufbau

  • WPF

Es gibt 52 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    VBP TestingSolution - MVVM Aufbau

    Hallo,
    da ich gerade dabei bin, mein MVVM Template anzupassen und durch @Nofear23m Hinweise das es auch ohne Fremd Packages geht, habe ich eine TestSolution aufgebaut.
    Bisher habe ich immer das Nuget Paket Ninject benutzt, um zum Beipsiel Dialoge anzuzeigen, oder auch Pages hin und her zu schalten.
    Dies möchte ich jetzt durch Messanger und Services ersetzen.

    Die Testsolution ist in MVVM aufgebaut, d.H. es gibt:
    1. WPFApp
    2. BusinessLogic
    3. Context
    4. Helper
    5. InstanceHolder
    6. Model
    7. Repository
    8. UnitTest
    9. View
    10. ViewModel
    Alles in eigenen Layern.
    Zu Beginn habe ich 2 Models, Person und Address. Außerdem habe ich das AnimatedContentControl hinzugefügt um den Content zu animieren.
    Beim Starten wird im App Ordner eine SQLite DB angelegt und 3 Personen samt Bild und Adresse angelegt.
    Es kann zwischen den einzelnen Person und Bildern hin und her geschaltet werden, wobei die Animation dann greift.
    Noch nichts wirklich wildes.

    Haupteinstieg ist der MainWorkspace (minimal gehalten).
    Das Repository ist eigentlich fertig. Es gibt schon die PeopleLogic und ein paar Styles sind auch schon vorhanden.

    Ziel ist es, nun Services zu implementieren. Da ich mich mit Services nicht auskenne und es auch vielleicht für andere interessant ist, kann jeder das Projekt runter laden und ausprobieren.
    Vielleicht können wir gemeinsam das Projekt vervollständigen,

    Als ersten Schritt wäre vielleicht ein eigenes Fenster welches man dann in weiteren Projekten verwenden kann sinnvoll. Dann eine eigene Messagebox usw.

    Wer Lust und Zeit hat kann sich gerne beteiligen.
    Dateien
    "Hier könnte Ihre Werbung stehen..."
    Halt, halt.

    Ein guter Rat, schieße nicht übers Ziel hinaus. die ganzen Layer wie BL, Context, Helper und Repository kommen erst später und sind eher Projektspezifisch.

    Denn auch wenn es um MVVM geht gilt. Keep it simple and stupid. Für MVVM benötigt es erstmal "nur" 5 Layer. Die App, Model, ViewModel und View. Wenn man denn so will dann nnoch ein Projekt für UnitTests.

    Fertig.
    Die anderen Layer empfehle ich wirklich nur für große Projekte. Und mit großen Projekten meine ich wirklich große Projekte an denen teams arbeiten. Ich weis, du orientierst dich an dem WpfNotes Projekt, dies ist aber ein Beispiel wie man ein solches großes Projekt aufbauen kann und wie ich in diesem Projektbeitrag geschrieben habe auch wirklich nur für große Projekte. Das WPFNotes soll nur ein Beispiel sein.

    Ich würde also wieder einen Schritt zurück gehen und hier eine reine MVVM Beispiel App machen wo es erstmal weder um Datenhaltung geht (kann derweilen z.b. mittels Serialisierung gemacht werden) noch um eine Businesslogik oder gar ein generisches Repository. Letzteres benötigt man sowieso nur wenn man von der Datenhaltung unabhängig sein will.

    Was haltest du davon?
    Ich finde so kann jeder (auch du) erstmal MVVM besser verstehen als wenn das durch 5 Layer geht.
    Später kann man dann Layer für Layer hinzufügen wenn man will.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo,

    auch mal kurz meine Meinung dazu, weil mich das Projekt ja auch interessiert...

    Also ich finde auch, dass man am Anfang nicht alle Layer mit einbauen muss, weil man ja z.B. ein generisches Repository meistens gar nicht braucht...

    Aber eine BusinessLogic fände ich schon cool, weil man dort nochmals aktiv "lernt" den eigentlichen Code der für die Logik zuständig ist von dem Code zu trennen, der nur für das Bereitstellen für die View da ist.

    Ach ja @MichaHo, wenn du das Projekt jetzt so als eine Art "Gruppenlernprojekt" machen willst ist das echt cool. Dann wäre es aber aus meiner Sicht ganz praktisch eine Quellcodeverwaltung zu verwenden, damit jeder auf dem aktuellen Stand ist, und man das Forum nicht immer mit den ganzen Anhängen "belasten" muss...

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Hi,
    mein Senf dazu:
    Klar sind die Layer alle (noch)nicht nötig, aber da ich nahezu bei jedem Projekt immer mit DB arbeite, will ich mich garnicht daran gewöhnen. Es erstmal anders zu machen.
    man kann ja auch in diesem Projekt die Layer erstmal links liegen lassen und Dummy Daten direkt im MainWorkspace oder in der BL oder noch stupider, im Model erstellen lassen. Die Layer tun ja erstmal nicht weh und gerade das Repository ist ja fertig, der Context, der InstanceHolder, alles fertig, kann man also ganz easy weg lassen, oder benutzen.

    wir können ja auch die nicht benötigten Layer erstmal aus dem Projekt entfernen und wenn wir sie brauchen wieder rein nehmen, sind ja dann trotzdem da und nicht gelöscht

    Ich kann das Projekt gerne auf Meinen AzureDevOps hoch laden, ihr benötigt dann halt einen MS Account (kost ja nix). Und ich bräuchte dann die Email und kann Euch darüber einladen. Gerne auch per PM.

    EDIT: es muss auch nicht dieses TestProjekt sein, ich hab noch ein größeres Projekt zur Inventarisierung von IT Material mit Zugriffen für Buchhaltung für die Anlagengüter, die Instandhaltung für die Ausgabe von Zubehör, für die IT zur Verwaltung von allem und für die User um seine eigenen Devices zu sehen. Das ganze mit MSSql Anbindung, Windows Authentifizierung usw.
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    OK, also Businesslogik und der Instanceholder wäre noch OK, den Rest würde ich erstmal weglassen.

    Also App, Model, View, ViewModel, BL, InstanceHolder, UnitTests.

    Generisches Repository ist gut und schön aber wirst du fast nie benötigen. du kannst in der BL genauso mit EF Arbeiten. Warum denn nicht? Ein generisches Repository wird NUR benötigt falls sich die Art der Datenhaötung später ändern könnte. Also wenn der "Kunde" sagt: Wie rufen die Daten direkt vom SQL Server ab, aber wir wollen später ein Webservice bauen welches die Daten zur Verfügung stellt weil uns der SQL SErver zu unsicher ist.
    Dann ja. Weil dann können wir hergehen und die paar Methoden im Repository umschreiben und alles ist gut. Solange das nicht der Fall ist (recht selten) bin ich der Freund des einfachen Weges.
    Wir können es später ja gerne dazunehmen, und das bringt mich zum nächsten....

    Einfach halten. Ich würde wirklich ein kleines Testprogrämmchen machen. Vieleicht 2-3 Pages und ein bis zwei Dialoge - Fertig.
    Und das können wir dann wenn du willst immer weiter mit Layern "aufblasen" aber du wirst sehen das das erst bei Monsterprojekten was bringt.

    Erstmal überlege dir bitte was es für eine kleine Miniapp werden soll, zumindest ein wenig "Sinnvoll" sollte sie dann ja doch sein oder?

    Und Quellcodeverwaltung wäre ich für GitHub, da kann jeder mitsehen. Da ich beide C#ler seit füge ich mich dem natürlich.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,

    OK, klingt nach nem Plan.
    Idee für eine sinnvolle App hab ich schon, es wird ein Bundesliga Tipspiel, hab das schon mal in VB mit Unterstützung von @ErfinderDesRades umgesetzt.
    Suche morgen mal das alte Projekt raus und hänge es hier an. Baue dann die Grundstruktur für WPF und MVVM und lade es auf GitHub hoch.
    "Hier könnte Ihre Werbung stehen..."
    Klingt gut.
    Anfangen mit so wenig Layer wie möglich. Hinzufügen kann man immernoch welche, aber sonst wird das ja wieder so ne "Never ending story".
    Ok, lade es mal hoch und fpge mich bitte als Constributer hinzu.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ok das alles hört sich ziemlich gut an. Ich hätte auch gern den link dazu.
    kann man wieder einiges lernen. Übersetze es mir dann nach VB. Bisschen c# kann ich.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Ups, Collaborator nennen die das. Tab "Settings" -> Manage Access -> Invite a collaborator

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo,

    MichaHo schrieb:

    Suche morgen mal das alte Projekt raus und hänge es hier an. Baue dann die Grundstruktur für WPF und MVVM und lade es auf GitHub hoch.


    Hast du das alte Projekt gefunden? Wenn ja, könntest du es vielleicht noch hochladen?
    Dann kann man sich leichter vorstellen was es später einmal werden soll.

    Viele Grüße
    Florian

    PS: 1. Wie fangen wir jetzt an?
    2. Wie kann ich denn jetzt z.B. eine Codeänderung machen, wenn ich kein Collaborator bin?
    ----

    WebApps mit C#: Blazor

    florian03 schrieb:

    Wie fangen wir jetzt an?

    Ruig brauner. Ne, im ernst. Machen wir schritt für Schritt weder ich noch andere hier haben jeden Tag Zeit und ich würde sagen wir lassen das mal ein paar Tage "ziehen" und schaun uns das "alte" Porjekt mal an. (Bin noch nicht dazu gekommen). Dann machen wir das Schritt für schritt.

    florian03 schrieb:

    Wie kann ich denn jetzt z.B. eine Codeänderung machen, wenn ich kein Collaborator bin?

    Das ist einer dieser Schritte, wir müssen uns was ausmachen. Es ist ja jetzt kein Teamprojekt im eigendlichen Sinn. Es ist eine Art Schulungsprojekt welches von MichaHo ins Leben gerufen wurde.
    Ich würde sagen das eben @MichaHo die großen änderungen im Projekt Commited und ich als Berater fungiere (wollte nur zur Sicherheit die Rechte haben).
    Alle anderen wenn sie verbesserungen haben können ja gerne einen PullRequest machen. (Projekt Forken und auf den Fork Requesten, wenn der Owner die Codeänderung für gut empfindet kann er diesen in den Master Branch holen.)

    MichaHo schrieb:

    anbei das Projekt.

    Super, sobald ich etwas Luft habe schau ich mir das mal an.

    So, ich geb dem Thread mal ein wenig Zeit und werde dann die letzten Beiträge hier etwas kürzen und ein paar dazwischen löschen und im Startpost die Wichtigsten Infos zusammenfassen, denn das will ja keiner alles lesen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,
    Danke erstmal an Euch alle das ihr da mit macht. :thumbsup:
    wir sollten uns ein Kommunikations Medium überlegen oder sollen wir alle Gedanken hier in den Thread schreiben?
    Als erstes sollten überlegen, ob die App nur von einem, ich nen ihn mal TipMaster, benutzt werden soll, so wie das alte Projekt, oder ob wir einen Admin und einen User Login machen.
    Wenn wir darauf ne Antwort haben würde ich mich dran setzen und mal die App Zeichnen so wie ich mir sie vorstelle. Vielleicht habt ihr ja auch Lust, Zeichnungen anzufertigen. Kann man ja quasi mit jedem Smartphone einscannen und z.Bsp. Auf enen OneDrive Ordner ablegen.

    Wie wir weiter machen ist eigentlich auch schnell erklärt, erstmal grob zeichnen wie es aussehen soll und mal über die Models drüber gucken. Alles weitere dann, wenn alle das alte Projekt mal angeschaut und Ideen entwickelt haben.
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Als erstes sollten überlegen, ob die App nur von einem, ich nen ihn mal TipMaster, benutzt werden soll, so wie das alte Projekt, oder ob wir einen Admin und einen User Login machen.


    Also ich fände es echt schön, es mit einem Login System und somit einer grwissen "Rechjteverwwaltung" umzusetzen. Sprich ein TippMaster bekommt andere Views zu sehen als ein normaler Spieler...

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor

    MichaHo schrieb:

    Alles weitere dann, wenn alle das alte Projekt mal angeschaut und Ideen entwickelt haben.

    Bekomme aber Compilerfehler die ich so nicht kenne. Beide Files sind erst garnicht vorhanden??

    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Bekomme aber Compilerfehler die ich so nicht kenne. Beide Files sind erst garnicht vorhanden??



    Das liegt daran, dass du erst den Zip-Ordner als "sicher" makieren musst...
    Geh mal auf die Eigenschaften von dem Zip-Ordner und aktiviere "Zulassen" und entpacke ihn dann.
    Dann sollte es funktionieren.

    Viele Grüße
    Florian

    ----

    WebApps mit C#: Blazor
    Ne, leider nicht...

    Es schicke mit bitte jemand eine EXE, der Code interessiert mich in dem Fall eh nicht. Will nur wissen um was es geht.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##