I think these decisions are at the heart of what design is all about ...
Kind regards,
Peter Kriens
On 19 feb. 2014, at 08:45, Jean-Baptiste Onofré <[email protected]> wrote:
> Hi Peter,
>
> I agree, we had some discussion with Christian where he wanted to set all as
> bundle, whereas we have some pieces in Karaf where we just embed as private
> package.
> The challenge is to find the right balance between visibility, API,
> granularity, etc.
>
> Regards
> JB
>
> On 02/18/2014 07:27 PM, Peter Kriens wrote:
>> My god, your mind must have been completely warped by Spring! :-) There have
>> been eons before Spring when you still had to wire your app with this old
>> fashioned out of style keyword call 'new'. :-)
>>
>> Kidding aside, I actually do not recognize the problem. In general I just
>> create the private objects with 'new' and lazily. I.e. I do not go out of my
>> way to make them separate. One thing I learned about dependencies is that it
>> is all or nothing. You should not look at each dependency an-sich but look
>> what it means for the people that depend on you. Each class in your bundle
>> is fair game since you're already coupled. There is no use trying to protect
>> yourself from changes because you already in the same boat. So inside your
>> bundle you use the normal Java access rules for getting some local privacy.
>> And other than that, any external reference is a service.
>>
>> In my experience, I find I have quite a large number of components that have
>> a set of private adjoint classes. If I have a public API, I do not mind
>> talking to my siblings in the same bundle through the service registry since
>> quite often this turns out to be useful, if only for debugging. Realize that
>> a service is really cheap, there are installations with ten thousands of
>> services.
>>
>> The trick here is cohesion. Inside a service I normally have small to medium
>> sized program, using between a few to a 100 classes. I feel I've succeeded
>> when that complexity looks really simple through the service API, with only
>> a few adjoint classes. This is what modularity s all about, putting a lot of
>> complexity inside and only showing an API to allow collaboration.
>>
>> Don't hesitate to contact me if you have an actual use case and want to
>> discuss it.
>>
>> Kind regards,
>>
>> Peter Kriens
>>
>>
>>
>>
>>
>> On 18 feb. 2014, at 10:16, Christian Schneider <[email protected]>
>> wrote:
>>
>>> I think you are right that the number of classes to wire inside a bundle is
>>> much lower than the number of classes in a spring application. So there is
>>> less need for a DI solution.
>>>
>>> The question is though how to do the wiring with java in practice. Do you
>>> have some larger examples for this? What I am especially concerned with is
>>> the handling of instance creation and DI setup when classes are partly
>>> created by hand and partly by DS.
>>>
>>> Christian
>>>
>>> On 17.02.2014 20:19, Peter Kriens wrote:
>>>> I do not think this is the idea of DS. Spring was invented to handle the
>>>> byzantine complexity of an average Java application at the time. Trying to
>>>> wire it all together had become a nightmare because there are ordering
>>>> issues in initialization. The complexity of apps exploded because the
>>>> complexity increases exponentially with the number of dependencies. So
>>>> Spring provided a fantastic solution to this problem. However, it also
>>>> introduced XML programming which is fundamentally bad (it is probably the
>>>> worst language to code in ever devised by mankind). In the early naughties
>>>> this was ok since Spring solved a real problem.
>>>>
>>>> I think a natural DS application uses normal plain run of the mill Java
>>>> code to wire the private beans. Since these are normally a small number,
>>>> there are in general no ordering issues, specifically since the scope is
>>>> private, no unexpected surprises. Also the wiring is much better done in
>>>> Java because it gives you 100% type safety, error checking in the
>>>> compiler, and lots of context help in your IDE. Since the problem is so
>>>> much smaller and all your types are in private scope and you really want
>>>> automatic wiring then there are lots of solutions: Picocontainer, Guice,
>>>> etc.
>>>>
>>>> DS works so well because it is highly cohesive. It basically does one
>>>> thing, wiring services, and it does that extremely well. I would really
>>>> think it would be shame if we try to turn it into another bloated monster
>>>> ... :-)
>>>>
>>>> Kind regards,
>>>>
>>>> Peter Kriens
>>>>
>>>>
>>>>
>>>
>>> --
>>> Christian Schneider
>>> http://www.liquid-reality.de
>>>
>>> Open Source Architect
>>> http://www.talend.com
>>>
>>> _______________________________________________
>>> OSGi Developer Mail List
>>> [email protected]
>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>> _______________________________________________
>> OSGi Developer Mail List
>> [email protected]
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>
> --
> Jean-Baptiste Onofré
> [email protected]
> http://blog.nanthrax.net
> Talend - http://www.talend.com
> _______________________________________________
> OSGi Developer Mail List
> [email protected]
> https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev