A good example for the usage of DTOs is:

http://javadox.com/org.osgi/osgi.cmpn/6.0.0/org/osgi/service/component/runtime/ServiceComponentRuntime.html

Christian

Am Fr., 7. Dez. 2018 um 12:07 Uhr schrieb Clément Delgrange via osgi-dev <
osgi-dev@mail.osgi.org>:

> Hi, thanks for your response.
>
> As I mention above, it would be very bad for the DAO to use entity types
> in its API as this would force the implementation decision...
>
>
> I agree, I would not replace API parameters with entity types I meant
> replacing entity types with DTOs and API parameters with plain Interface or
> Classes.
>
> The REST API is actually not coupled to the DTO representation...
>
>
> Yes indeed.
>
> It’s quite the opposite - the DTOs are the public inter-bundle
> communication data. They are used this way in a lot of OSGi specifications.
>
>
> I looked at the R7 osgi.cmpn  in the org.osgi.service.* packages but I did
> not see services using DTOs in that way, maybe have you a link? Or better a
> realistic project that use DTOs for service parameters and return type?.
>
> Your response clarify a the way enRoute proposes to use DTOs but it is
> still hard to now when to use them. For example, if the microservice
> example change: now the REST service does not call the DAO layer directly
> but a PersonManager service that will send events, call other services, ...
> and finally call the DAO layer. The PersonManager service has almost the
> same methods than the PersonDao service, do you use DTOs for the
> PersonManager service? In this way DTOs seem less flexible than interfaces
> for parameters/return types, if later we want to add a `getFullName` or a
> method to filter Addresses? As mentioned in the tutorial, DTOs are not
> immutable or thread safe, does that mean each time you call a service you
> copy them?
>
> Clément.
> --
> Clément Delgrange <cl.delgra...@protonmail.com>
>
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Friday, December 7, 2018 11:09 AM, Tim Ward <tim.w...@paremus.com>
> wrote:
>
> Hi Clément,
>
>
>    - The de-coupling is not the fact that they are DTOs? If the API had
>    defined Interfaces or Classes the de-coupling would be the same.
>
> In this case the decoupling is from the data model. If the DTO types were
> JPA entities (i.e. they had JPA annotations on them) then everyone would be
> coupled to the JPA data model, and in turn, the database. You are correct
> that the types don’t need to be DTOs for this to be the case, however DTOs
> are a good choice because they force you to treat the exchanged objects as
> pure data, rather than an implementation specific behaviour or mapping.
> Perhaps a slightly better wording would be "*Because of the de-coupling
> provided by the **DTO
> <https://enroute.osgi.org/FAQ/420-dtos.html> package**, all we need do is
> re-implement **dao-impl…”*
>
>
>    - I understand the usage of DTOs for the REST service (as data are
>    leaving/coming) but not for the *DAO services API. The actual data leaving
>    the system are the *Entity classes in the implementation bundle (so the
>    transferable objects are converted into other transferable objects!).
>
>
> As I mention above, it would be very bad for the DAO to use entity types
> in its API as this would force the implementation decision. The
> implementing bundle should be free to use JDBC, JPA, NoSQL or whatever it
> wants to store and retrieve values. The moment that you start talking about
> Entity Classes you’re already most of the way to an ORM implementation,
> which is one heck of an implementation internals leak.
>
>
>    - Also the fact that the DTOs are exported and used in the service
>    contract in the API bundle, the REST-API (and so the clients) is coupled to
>    the internal representation of the Java application.
>
> The REST API is actually not coupled to the DTO representation - the REST
> service implementation could do whatever transformation it chose
> internally. For simplicity we have chosen to keep the REST responses close
> to the DTOs, but we could have quite easily changed all of the field names
> in the JSON. Again, the OSGi implementations communicate using an API, but
> they can convert between internal and external representations as needed.
> In this case the external “REST” representation doesn’t require a
> transformation, but it could easily be transformed to if required.
>
> I thought the DTOs was more data-api specific to a provider bundle, such
> as : some-framework-rest-provider (with private DTOs) --adapt--> Java
> application (with domain interface/class) --adapt--> jpa-dao-provider (with
> private DTOs) .
>
> It’s quite the opposite - the DTOs are the public inter-bundle
> communication data. They are used this way in a lot of OSGi specifications.
>
> If in contrary the purpose of the DTOs is to have one consistent data
> representation which evolves as soon as it is required by one of the system
> (rest, java application, database-schema), how to deal with framework
> specific annotations?
>
> Objects annotated with framework specific annotations belong on the
> *inside* of the bundle using the framework - the OSGi enRoute micro service
> example is a great place to look. The JPA entities are internal to the JPA
> implementation of the Data Access Service, as it is the only user bundle
> that knows that JPA is being used.
>
> Best Regards,
>
> Tim
>
> On 6 Dec 2018, at 19:30, Clément Delgrange via osgi-dev <
> osgi-dev@mail.osgi.org> wrote:
>
> Hi,
>
> I have some questions regarding the OSGi enRoute microservice example and
> the usage of DTOs. (enroute-tutorial-jpa
> <https://enroute.osgi.org/tutorial/032-tutorial_microservice-jpa.html>,
> enroute-dto <https://enroute.osgi.org/FAQ/420-dtos.html>).
>
> I think I understand the purpose of DTOs (easy to write, easy to process,
> useful when data leave the system) but their usage in the JPA example is
> not clear:
>
> *Because of the de-coupling provided by the **DTOs*
> <https://enroute.osgi.org/FAQ/420-dtos.html>*’s, all we need do is
> re-implement **dao-impl...*
>
>
>
>    1. The de-coupling is not the fact that they are DTOs? If the API had
>    defined Interfaces or Classes the de-coupling would be the same.
>    2. I understand the usage of DTOs for the REST service (as data are
>    leaving/coming) but not for the *DAO services API. The actual data leaving
>    the system are the *Entity classes in the implementation bundle (so the
>    transferable objects are converted into other transferable objects!).
>    3. Also the fact that the DTOs are exported and used in the service
>    contract in the API bundle, the REST-API (and so the clients) is coupled to
>    the internal representation of the Java application.
>
> I thought the DTOs was more data-api specific to a provider bundle, such
> as : some-framework-rest-provider (with private DTOs) --adapt--> Java
> application (with domain interface/class) --adapt--> jpa-dao-provider (with
> private DTOs) .
>
> If in contrary the purpose of the DTOs is to have one consistent data
> representation which evolves as soon as it is required by one of the system
> (rest, java application, database-schema), how to deal with framework
> specific annotations?
>
> I hope I was clear enough!
> Thanks.
> --
> Clément Delgrange <cl.delgra...@protonmail.com>
>
>
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org
> https://mail.osgi.org/mailman/listinfo/osgi-dev
>
>
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org
> https://mail.osgi.org/mailman/listinfo/osgi-dev



-- 
-- 
Christian Schneider
http://www.liquid-reality.de

Computer Scientist
http://www.adobe.com
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to