On Mon, Apr 24, 2017 at 1:50 PM, Cedric BAIL <cedric.b...@free.fr> wrote:
> On Sun, Apr 23, 2017 at 8:17 PM, Carsten Haitzler <ras...@rasterman.com> 
> wrote:
>> On Mon, 10 Apr 2017 23:46:43 -0300 Gustavo Sverzut Barbieri
>> <barbi...@gmail.com> said:
>>> On Mon, Apr 10, 2017 at 7:12 PM, Cedric BAIL <cedric.b...@free.fr> wrote:
>
> [...]
>
>>> > We have been iterating over a MVC design for more than a year now. I
>>> > think we are nearing a design that start to look good. The funny part
>>> > is when I was trying to find some presentation to explain people about
>>> > MVC and the difference with what we were doing, I stumble on Microsoft
>>> > MVVM design pattern which is pretty close to the design we have
>>> > selected. So we will rename the work we have done from ProxyModel to
>>> > ViewModel to use the same naming convention as everyone else.
>>> >
>>> > The main difference between MVC and MVVM is that it allow the
>>> > definition of a clean interface between View and Model. There isn't
>>> > really a ProxyModel or ViewModel interface, as they really are just a
>>> > Model that get data from another Model and interpret them into what
>>> > the View will actually display. This means you can easily reuse Model
>>> > and that you can test your Proxy/ViewModel without connecting it to an
>>> > actual View.
>>> >
>>> > And last very nice benefit, I think, is that you are defining a
>>> > "connection" for each parameter of your widget. So to connect a View
>>> > with a Model, you are only setting the model and indicating which
>>> > property to fetch on the model. No need to deal with callback in many
>>> > case ! For an example (which is broken at the moment) of the idea you
>>> > can look at layout_model_connect.c in efl elementary example.
>>> >
>>> > The most complex work will now be in writing this Proxy or View Model.
>>> > This is something we have to work on to make it easier.
>>>
>>> I've talked to you and felipe at IRC, I still think that the current
>>> Model is trying to address too much of "performance and async" at the
>>> level that it will suck for developers.
>>>
>>> to address the correct goal of "never block", what the current
>>> implementation does is make all property-get async, resulting in a
>>> promise... callback, etc. Whenever you need a simple:
>>>
>>>   if (model.a + model.b < model.c) do_bla(model);
>>>
>>> then you're screwed... you need to store these elsewhere, wait on 3
>>> callbacks, then execute what you want. Okay, helpers to accumulate and
>>> wait on all futures... then dispatch an array of values will be there,
>>> but still.
>>>
>>> caching is also left to outside. But to cache properly you need to
>>> know your information, access pattern, load coast, evict cost... Okay,
>>> applications may know better which information they are going to use,
>>> but they can hint that to model if needed (we could add a way to
>>> declare "hot properties").
>>
>> i personally prefer the idea of caching. have the item object and list which
>> properties you want fetched, and some thread fetches in the background. when
>> it's done your promise or callback is triggered. once it is you can be 
>> certain
>> the properties are already fetched and live in memory. it's not a promise per
>> property to fetch. it's "get me all of this in a blob" and should be simpler 
>> to
>> deal with. this is where i dislike promises for this. i prefer some "updated"
>> callback... as below, it'd work better with live updates. if an object 
>> changed
>> at the source - the model can be listening and it already knows what 
>> properties
>> you want... and it can auto re-fetch them and then call the "updated" 
>> callback.
>> you only have to register that cb on that object once to handle all cases.
>
> The all in one blob doesn't work well for multiple reason. First you
> are connecting a data model to each widget directly, so each widget
> needs now to know how to extract the value it needs from that blob
> (Solution range from using a hash and a string in an eina value, to
> something like eet or even give an eo object that inherit from
> efl_part). It also means that the code in the proxy model will get
> more complex than you envision as you need to fetch from the blob the
> property you want before doing your operation and packing them in the
> result blob. Using a blob increase the complexity of writing a data
> model and make life for binding quite more complex (Don't forget we
> want to be able to write data model in any language).

I believe he said "one blob" as in "one go", for example you query and
a get a single "updated" event, with the payload being the list of
properties that changed value, pretty much like everywhere else,
example:

org.freedesktop.DBus.Properties.PropertiesChanged (STRING interface_name,

DICT<STRING,VARIANT> changed_properties,

ARRAY<STRING> invalidated_properties);



> Also as pointed before, we are talking about only connecting
> promise/future per information you are displaying in the current view.
> There isn't going to be thousand of them and as long as they don't
> block the UI, they won't matter. What matters is how easy we can write
> a data model in any language.

even that I think will be easier if we can do in a single "updated" event.


-- 
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (16) 99354-9890

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to