Comments (5)
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.
@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.
@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.
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:
- you don't need to mark them as an
Injectable
and use deps directly in the constructor - make a pr, where you will be able to pass instances of the controllers.
from node-decorators.
Merged :D
I'll prepare release tonight
from node-decorators.
Related Issues (20)
- Rename Request, Response Decorators to Req and Res HOT 6
- How to use native express middleware in controller or REST decorator? HOT 9
- @decorators/socket with @decorators/express HOT 3
- Decorators in multiple files HOT 2
- Unable to get sent object with @Body HOT 4
- Feature Request - Plugin Server System HOT 6
- Injection failed for classes with properties in constructor HOT 1
- After Using Next response from other controllers are empty HOT 2
- Cannot read properties of undefined (reading 'use') HOT 1
- Question: example of how to use error middleware? HOT 10
- Feature Request - Dynamic controller (class) instance HOT 9
- Container.get returns a Promise HOT 2
- Feature Request - attach custom decorators HOT 5
- Feature request - Custom http code handling HOT 3
- Typescript v5 injection of type undefined HOT 11
- socket decorator not working HOT 1
- TypeError: Cannot read properties of undefined HOT 4
- Decorators with inheritance HOT 4
- Error while inject property in middelwares HOT 6
- Error injection HOT 18
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from node-decorators.