"domain object" vs "message payload"; Yes, this is the point. We came from 
RequestFactory which works quite good with "domain object" models, we use 
one model for each type, this model is the same in the server and the 
client, and all views use the same model.

So, responding to the 'JSON object recreation in the client'; JsInterop 
makes trivial Object recreation, you map your messages in a very explicit 
and clean manner having almost zero overhead, but you should take care of 
this "domain object" vs "message payload" model strategy. JsInterop doesn't 
work well with "domain object" models (so questions like how can you return 
a Set or a Map are currently hard to answer, and makes no much sense in the 
"message payload" side), but it will work much better with "message 
payloads". We are getting really good result using plain classes without 
methods. But it's important to think on terms of "message payloads", you 
should try to avoid fancy things, using only primitives (plus Boolean, 
Double and String), arrays or other @JsType models. We end up with lot of 
services like this. This models frequently do not need any special 
annotation, but are so simple that most JSON encoder works correctly 
(Jackson, gson, moshi...) and obviously JsInterop.

@AutoRestGwt
@Path(RESOURCE_TOOLS)
@Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
public interface ToolsRestService {

    @GET @Path("build")
    Single<BuildInfo> getBuildInfo();

    @JsType(namespace = GLOBAL, name = "Object", isNative = true)
    class BuildInfo {
        public int buildDate;
        public String version;
        public String commitId;
        public String javaVersion;
    }

    @GET @Path("system")
    Single<SystemInfo> getSystemInfo();

    @JsType(namespace = GLOBAL, name = "Object", isNative = true)
    class SystemInfo {
        public double startupTime;
        public double totalMemory;
        public double freeMemory;
        public double usedMemory;
    }
}


I like to think of this classes as something like JSON (JavaScript Object 
Notation) but in Java and to define the scheme instead of the object itself 
so JOSN (Java Object Scheme Notation), i.e. a subset of Java just to define 
objects schemes. 

On Saturday, August 20, 2016 at 12:54:24 AM UTC+2, Thomas Broyer wrote:
>
> I think the crux is thinking in terms of messages (payloads) rather than 
> "domain objects". This applies to DTOs vs domain objects too, with RPC or 
> RequestFactory or whatever.

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to