Results 1 to 6 of 6

Thread: MVVM zonder livebindngs

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,230

    MVVM zonder livebindngs

    Volgens het MVVM protocol zijn de GUI componenten volledig geschreiden van het control model. Dat betekent dus dat een component als TImage niet als parameter mag worden doorgestuurd naar het control model, maar dat het resultaat teruggeven wordt via een functie naar het viewmodel waar TImage staat. Om het resultaat vanuit de database door te geven krijg je dan dit:
    Delphi Code:
    1. function tControlModel.ShowPicture : TPicture;
    2. var BlobStream: TStream;
    3. begin
    4.   result := TPicture.create;
    5.   BlobStream := TMemoryStream.Create;
    6.   try
    7.     if not DMModule.MyQuery.FieldByName('afbeelding').IsNull then
    8.     begin
    9.       DMModule.MyQuery.GetBlob(DMModule.MyQuery.FieldByName('afbeelding')).SaveToStream(BlobStream);
    10.       Blobstream.Position := 0;
    11.       result.loadfromstream(blobstream);
    12.     end;
    13.   finally
    14.     BlobStream.Free;
    15.   end;
    16. end;
    Met de TDatasource.OnChange zal je dan TImage kunnen vullen met het resultaat van ShowPicture.
    Maar TDatasource is eigenlijk een datacomponent, die niet in het viewmodel mag staan.
    Eigenlijk ben je met MVVM afhankelijk van livebindings, omdat deze buitenom sommige componenten linkt aan je controlmodel via TBindsourceDB component. Maar eigenlijk is dit een equivalent van TDatasource. Sterker nog; TBindsourceDB heeft een interne TDatasource in zich. Kan je dan spreken over datascheiding?

    Is het uberhaubt mogelijk om zonder livebindings gebruik te maken van het MVVM model in Delphi?
    Delphi is great. Lazarus is more powerfull

  2. #2
    Senior Member
    Join Date
    Dec 2003
    Location
    Den Haag
    Posts
    181
    Ook als je geen MVVM gebruikt, kan je hele discussie voeren of een TDataSource nu op een TForm of op een TDataModule thuishoort.

    MVVM zonder Livebindings is zeker mogelijk. Grijji heeft voorbeeld:
    https://blog.grijjy.com/2018/01/22/m...t-part-1-of-3/

  3. #3
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,212
    Ik ben al niet zo dol op functies die een klasse instantiëren en wat nu als het veld "afbeelding" nu
    wél leeg is, dan geef je een lege TPicture terug waar de gebruiker niet direct weet van heeft.
    En waarom (zie ook mijn stukje in het topic "Strict Private vs Private" van laatst) verwijs je vanuit
    TControlModel naar een query heel ver weg (DMModule.MyQuery) en roep je daar een method aan?

    Toegegeven: ik heb mij nooit erg geïnteresseerd in models en patterns (voor mij is het belangrijker
    dat code logisch, begrijpelijk, consequent en porteerbaar/universeel is), maar methods aanroepen
    die niet aan mijn directe omgeving toebehoren lijkt mij niet wenselijk.
    TMemoryLeak.Create(Nil);

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,230
    Quote Originally Posted by Erwin View Post
    Ook als je geen MVVM gebruikt, kan je hele discussie voeren of een TDataSource nu op een TForm of op een TDataModule thuishoort.

    MVVM zonder Livebindings is zeker mogelijk. Grijji heeft voorbeeld:
    https://blog.grijjy.com/2018/01/22/m...t-part-1-of-3/
    Interessant stukje. Echter wel gebaseerd op hun eigen MVVM starter kit.
    Delphi is great. Lazarus is more powerfull

  5. #5
    Is het uberhaubt mogelijk om zonder livebindings gebruik te maken van het MVVM model in Delphi?
    Ik weet niet of mijn MVVM van de puurste vorm is, als dat al bestaat, maar ik gebruik het zonder livebindings. Bij mij zijn zowel het model als het viewmodel datamodules. Op het model staan de datasets en op het viewmodel de datasource.

  6. #6
    Volgens mij hoort TDataSource bij uitstek op het form. Het is de abstractie waarmee je DataSource-aware componenten aan een (externe) databron gekoppeld kunnen worden. TDataSource zelf heeft geen enkele directe relatie met een database en bestaat eigenlijk uitsluitend met het doel om als abstractie te dienen tussen je data(set) en de rest van je UI. Voor TBindingSource geldt eigenlijk hetzelfde.
    1+1=b

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •