Thanks for the link!
--
Clément Delgrange <cl.delgra...@protonmail.com>
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Friday 7 December 2018 13:08, Christian Schneider <ch...@die-schneider.net>
wrote:
> 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...
>>>>
>>>> - 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.
>>>> - 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!).
>>>> - 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