On 11 September 2012 20:27, Oliver Heger <oliver.he...@oliver-heger.de> wrote:
> Am 11.09.2012 00:08, schrieb sebb:
>
>> On 10 September 2012 20:33, Oliver Heger <oliver.he...@oliver-heger.de>
>> wrote:
>>>
>>> Am 09.09.2012 14:26, schrieb sebb:
>>>
>>>> On 8 September 2012 15:45, Oliver Heger <oliver.he...@oliver-heger.de>
>>>> wrote:
>>>>>
>>>>>
>>>>> Am 08.09.2012 03:44, schrieb sebb:
>>>>>
>>>>>> On 7 September 2012 20:46, Oliver Heger <oliver.he...@oliver-heger.de>
>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> the pom was updated to make 2.0-SNAPSHOT the current development
>>>>>>> version.
>>>>>>> This means we are free to implement major changes without having to
>>>>>>> enforce
>>>>>>> binary backwards compatibility.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> BC breakage will require package and Maven coordinate changes at some
>>>>>> point just before release.
>>>>>
>>>>>
>>>>>
>>>>> Yes, I am aware of this.
>>>>>
>>>>>
>>>>>>
>>>>>>> The question is: What are the goals for version 2.0? I would
>>>>>>> recommend
>>>>>>> to
>>>>>>> define a clear focus so that the next release will not take too long.
>>>>>>> Obviously there are already people waiting for a [configuration]
>>>>>>> version
>>>>>>> compatible with [lang3].
>>>>>>>
>>>>>>> Some points I have in mind are the following ones:
>>>>>>> - Switch to [lang3]. This is the main reason for going to version 2.0
>>>>>>> because this cannot be done in a binary compatible way.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Not sure I follow that.
>>>>>> Why would changing a dependency affect the API for Configuration?
>>>>>> Does not make sense to me.
>>>>>
>>>>>
>>>>>
>>>>> Some classes of [lang] are exposed in the public API of
>>>>> [configuration].
>>>>> For
>>>>> instance, variable substitution in configuration files is done by a
>>>>> org.apache.commons.lang.text.StrSubstitutor object. The StrSubstitutor
>>>>> to
>>>>> use can be set. So switching to [lang3] will effectively change the
>>>>> public
>>>>> API of [configuration] in an incompatible way.
>>>>
>>>>
>>>>
>>>> That seems very fragile. There has to be a better way to handle that.
>>>>
>>>> Fixing it will break the API (once), but at least the API will then be
>>>> stable, regardless of what happens with LANG.
>>>
>>>
>>>
>>> Do you mean all interfaces or classes from 3rd party libraries should be
>>> wrapped so that they do not leak in the public API?
>>
>>
>> Not sure it's necessary to wrap all 3rd party library APIs, just don't
>> expose their classes in the Configuration API.
>>
>>> I agree that using 3rd party classes in the public API is obviously
>>> fragile
>>> and should be avoided as much as possible. But I am not sure whether a
>>> radical wrapping approach works in all cases.
>>>
>>> Also, it might make reuse of classes harder for client code. Take for
>>> instance the StrSubstitutor example. A client may already have a custom
>>> implementation to be used with the corresponding [lang] classes. Now this
>>> implementation cannot be used together with [configuration] because here
>>> a
>>> slightly different interface is required - although the functionality is
>>> the
>>> same.
>>
>>
>> If you update Configuration to use lang3, then the custom
>> implementation will break anyway - unless Configuration is updated to
>> work with both Lang and Lang3.
>> Do you really want that? Does not seem scalable.
>>
>> If custom classes in future have to implement a Configuration
>> interface, rather than something from Lang, then at least the custom
>> class is then only dependent on the Config. API.
>>
>> Whatever happens, custom classes are going to need to be changed if
>> support for Lang is dropped in favour of Lang3.
>>
>> Or am I missing something here?
>
>
> Yes, sure, client code will be affected by this change.
>
>
>>
>>> Not sure how to deal with this issue in general.
>>
>>
>> Once the API dependency on Lang is removed, it won't be an issue.
>>
> My point was if we use functionality from a library like [lang] to implement
> concepts in [configuration], it might be natural to somehow pass objects
> from this library to [configuration] objects. Then they become part of the
> public API of [configuration].

> Avoiding this will take some effort

Yes, but that is worthwhile if it reduces the end-user workload either
now or in future maintenence.

Maybe it would be possible to use a service provider interface style
configuration?

> and may be less straight-forward from a user's point of view.

Binding the Configuration API to the Lang API means that updating to
Lang3 forces source changes on users.
That's not ideal either - in fact it's worse, as as it's potentially
an ongoing issue.

> Oliver
>
>
>>> Oliver
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to