Igniters,

We are developing new thin client. There are two approaches on how to
design it's interfaces - either re-use existing Ignite interfaces, or
define new.  Both approaches has pros and cons

*1) Re-use interfaces*
This approach is used in Hazelcast. Both server and client share the same
API.

Pros:
- excellent UX, switching from server to client is a matter of changing
several lines of code
Cons:
- first versions of our client would have very limited API support, so
users would have wrong impression that client is very rich, while in
reality most methods will throw "UnsupportedOperationException". This is
frustrating.
- Client and server interfaces will be locked forever, which might not be
appropriate in certain cases. E.g. thin client might decide to execute
"ComputeTask" inside the cluster, but ComputeTasl is not Serializable, so
it cannot be re-used.

*2) Separate interfaces*
E.g. we will have "IgniteCache" and "IgniteClientCache", "IgniteCompute"
and "IgniteClientCompute", etc.

Pros:
- Only really supported stuff is exposed to API
Cons:
- Separate code for thin client and (server, thick client) modes

I would definitely prefer the first approach with shared interfaces, but a
lot "UnsupportedOperationException" in the first versions scares me.

What do you think?

Vladimir.

Reply via email to