Giter Club home page Giter Club logo

Comments (5)

TypicalFence avatar TypicalFence commented on May 25, 2024

I quickly tried to add the support myself, its currently still sort of messy, but it appears to work
TypicalFence@d783e93

The biggest Issue probably is that attachControllerInstances accepts an array of random objects. Maybe a controller should extends some other class or implement some kind of interface.

Anyway, I am not creating a pull request just yet.
Looking forward to some kind of feedback at a more reasonable time of day. 😴

from node-decorators.

serhiisol avatar serhiisol commented on May 25, 2024

@AlexFence just for the sake of curiosity, why don't you like dependency injection ? I found that very simple, intuitive and pretty much straight forward thing in TS development.

from node-decorators.

TypicalFence avatar TypicalFence commented on May 25, 2024

@serhiisol I like DI as a concept. What I don't like are all the DI frameworks/libraries/etc, I like to DI in a simple way, even if it means more code or less convenience.

I've used DI frameworks in Java and PHP before but I also have seen codebases where the framework was providing some native way to do DI and was simply ignored by the authors of the codebases, because they did not understand what it is and why you'd want to use it.

When a class specifies its dependencies via its constructor, it makes clear what you need to create and use the class and does not need any knowledge of the API or terminology of the DI Framework/System and does not require any third party code.

a silly example with a way too complicated Hello World Program:

interface DisplayerInterface {
    display(text);
}

class ConsoleDisplayer implements DisplayerInterface { 
    display(text) { 
        console.log(text);
    }
}

class HelloWorld { 
    private displayer: DisplayerInterface;

    constructor(displayer: DisplayerInterface) { 
        this.displayer = displayer;
    }

    hello() {
        this.displayer.display("Hello World");
    }
}

new HelloWorld(new ConsoleDisplayer()).hello();

The main benefit here is that people that are not familiar with DI frameworks, (that might even get confused by many dependencies too), can easily understand what a class needs and inject the dependencies manually, after all this is what DI is at its core. Of course this may lead to layers of passing some object down the hierarchy, but this is something I am willing to do, for less infrastructure.


So what do think about my reasoning? Maybe I haven't considered a few things.

I just really feel like an additional dependency is more "Technical debt" than actually helpful when it comes to DI.

I hope you understand where I am coming from

from node-decorators.

serhiisol avatar serhiisol commented on May 25, 2024

DI brings flexibility in general, you don't need to care about instances, DI package instantiates them for you, you don't need to deal with instantiation in general.

In general if you don't want to use DI you have two options:

  1. you don't need to mark them as an Injectable and use deps directly in the constructor
  2. make a pr, where you will be able to pass instances of the controllers.

from node-decorators.

serhiisol avatar serhiisol commented on May 25, 2024

Merged :D

I'll prepare release tonight

from node-decorators.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.