Cool! Can't wait the first DI specific commit and the review :)

On 2023. Apr 19., Wed at 14:24, Stamatis Zampetakis <zabe...@gmail.com>
wrote:

> I think we all agree that DI can be beneficial in general.
>
> However, it's hard to say yes or no on something before having a
> concrete case to discuss; it doesn't have to be a PR but we need to
> work on a specific Hive use-case and list advantages/disadvantages of
> the proposal.
>
> Best,
> Stamatis
>
> On Mon, Apr 17, 2023 at 7:33 PM Laszlo Vegh <lv...@cloudera.com.invalid>
> wrote:
> >
> > Hi all,
> >
> > Sorry for not answering for so far, for some reason I did not receive
> your answers in my gmail account. I’m happy to see that there’s a
> conversation around the topic, so let me add my opinion on your points.
> >
> > First of all, introducing a DI framework does not mean a large scale
> refactoring. A suitable module, or a well-bounded set of components can be
> chosen as the first candidate. It’s also important that nobody will be
> forced to utilise the DI container when writing features, or to redesign
> existing code when it is being touched.
> > As for the aim: I’ve worked quite a lot with Java and .Net DI
> frameworks, and my experience was that having a DI framework greatly
> reduces the effort to write well organised and maintainable code. While
> well organised code can be written without DI frameworks too, the lack of
> such framework makes it much more easier to write poorly designed code (bad
> scoping, lifecycle issues, visibility issues, etc). On well-organised I
> mean:
> > Design patterns: DI containers make it easier to write code using the
> well known design patterns. For example you can implement factory, wrapper,
> adapter, etc patterns by simply using the offered features as it is
> supposed to do.
> > Streamlined component initialisation: No more spaghetti/boilerplate
> component init methods
> > Well defined component scopes (lifecycle): DI frameworks support various
> component scopes, which offers a fine grained control over component
> lifecylce -> Singleton, one component per thread, one component per request
> from DI container, etc.
> > Organised and visible component/class dependencies: Through constructor
> injection all the dependencies of a class are visible (unlike static method
> calls). Using this approach it is impossible to create circular
> dependencies which lead to object initialisation issues and hacks. By
> requiring all deps during object creation it’s way easier to detect or
> avoid unwanted dependencies. It also makes easier to better organise the
> code into packages and modules
> > Enhanced testability: I have explained this earlier.
> > Well defined component visibility: No need for “union-all” context
> objects. Instead of having context objects with references for all of the
> components which may required during the execution, each execution step can
> obtain the necessary dependencies from the DI container. Also, no more
> public static methods, or class instances. In order to let some component
> accessible from everywhere, there’s no need to make it public and static.
> DI frameworks also offer nested/sub contexts to limit/control visibility.
> > My original mail was supposed to be a kickoff, to start talking about
> DI. Before creating a PR with an example in Hive, I would like to have a
> common agreement that we want to do this, and there is no blocker which
> prevents us from doing it. Once we have this agreement I can create a
> working example and demonstrate how it will help us in the future.
> > Regarding the stability and performance issues: Of course those must be
> addressed as well, but as Stamatis pointed out, Hive is an open source
> project and everybody can have its own initiative in parallel to the
> others’.
> >
> > In Java I have the most experience with Spring, so I would prefer
> choosing it. It became huge by now, but it’s modular. We are not forced to
> use all of the offered features, if we want a pure DI container with some
> basic extensions, we would only need spring-core, spring-beans, and
> spring-context. It has several extensions and supports tons of other well
> known frameworks and/or technologies.
> >
> > Best regards,
> > Laszlo Vegh
>

Reply via email to