There is not even any mention to the Object.observe integration which would be the most exiting feature to improve Angular apps.
Angular looks and feels now like a Java framework, with ugly decorators and bloated APIs, that's really sad...
There is not even any mention to the Object.observe integration which would be the most exiting feature to improve Angular apps.
Angular looks and feels now like a Java framework, with ugly decorators and bloated APIs, that's really sad...
Most of my team eventually settled on the conclusion that "the cognitive load of working through the implications of how these nested directives play out in an application is simply not worth it". Or something to that effect.
We all studied angular studiously, we all did our best to implement it in an effective and sound manner, and when things went wrong, and they always go wrong, the shear complexity of the framework tied our hands and forced us to do some very ugly hacks.
I look at our application as it stands, and I regret using angular.
If angular 2 is simplifying it's framework, the only thing I have to say to that is "Thank god, maybe I'll try it again"
I'm sure they're using Object.observe it just wasn't mentioned in the presentation.
We definitely wont be switching to Angular 2.0. Hello React.
That is comparing apples to oranges. I agree that React is a view layer, but jQuery is most definitely not. The only thing they have in common is that they (usually) act on the DOM in some way.
Agreed on your point about needing other components/architecture to use React.
React can be much more than just a view. Even before integrating Flux or a lightweight library, React can be powerful.
The router I will probably miss, but there are decent router components for react.
Services, factories and providers? Rather big words for some insignificant differences.
The only thing I'll really miss is simple data-binding - but it has too high of a performance cost anyway. Simpler server-side rendering and testing will more than make up for that.
Looking at directives vs react components, it seems like many Angular features are just workarounds for some of its design choices.
What bugs me the most is the cognitive dissonance caused by what I'm reading about the new Angular. Its supposed to be more modular. Yet the thinking shown on these slides is quite the opposite:
* it introduces attribute changes in the markup that seem disharmonious with CSS selector syntax.
* it now also coupled with a new language in order to be used sensibly, which reintroduces annotations - another language-in-language that may lack the proper design care to make it composable and usable (e.g. how do you combine 5 annotations into one? I have no idea, guess you'll have to copy-paste them)
In short, to me it seems like Angular 2.0 is intent on going forward with adding even more complexity while breaking backward compatibility. "More modular" is not what I'm seeing here at all.
DI is the solution to that. It has every place in a language like JS, and I am excited with having it available.
Can't agree with that. Not sure what you mean by 'programmatic wiring' as it sounds vague, but certainly modules do not solve the same problem that DI solves.
Modules, (assuming you mean stuff you require() or equivalent), provide module-level dependencies but do not provide object instances. For example, if an instance of House requires a Door it is not enough to just require('Door'). You still have to do the equivalent of `new Door()` in your House module to get an instance. By doing so within the House module you just tightly coupled House to Door (your House now knows how to create Doors).
DI allows you to provide an object with object instances it depends on without tightly coupling said object to those dependencies (pass a Door instance into a House instance, advantage being you can pass in any type of Door and House doesn't need to care - thanks polymorphism)!
I'm not sure that's a great explanation, but it's worth trying every now and then right?
You seem to be making the argument that the language provides alternatives, and it's true that in dynamic languages you can eschew some of the benefits of DI by doing monkey patching instead (e.g. to mock out an object's 'tightly coupled' dependencies during testing), but to myself and many OOP proponents DI leads to cleaner design and simpler tests.
So what? What is so bad about House and Door being "tightly coupled"? Here's a House constructor that can take any kind of Door instance:
function House(door){
this.door = door;
}
This is JavaScript, let's stop trying to make it into Java.I am very much in favour of the approach you posted. That's exactly how I write my code (I don't currently use Angular), but yep ... that's DI. As James Shore said 'Dependency Injection is a 25-dollar term for a 5-cent concept'. [1].
What you show in that code example is what in my head I call "poor man's DI" or ... "passing stuff in" but it's actually my favourite kind as it demonstrates the fundamental idea and is easy to explain to people - as soon as you start talking about IOC and service providers things start to get murkier. I think that's definitely where Angular is losing some people. You can get a long way with the basic "poor man's" approach.
[1] http://www.jamesshore.com/Blog/Dependency-Injection-Demystif...
When I realized it was "passing stuff in" I wanted to shout, I have done that for years!
Well, it's the "automatic" part that is important, not just the DI.
var prod_dependencies = {
obj0: require('obj0'),
obj1: require('obj1')
};
var test_dependencies = {
obj0: require('mockobj0'),
obj1: require('mockobj1')
};
var dependencies = test_dependencies;
some_func(dependencies.obj0,dependencies.obj1);
Javascript does not need Java-style dependency injection.
Javascript's configuration language JSON is valid Javascript.You are injecting dependencies into `some_func` by passing them in. See my response to kyllo below.
I think what you are arguing against is using further patterns to facilitate dependency injection, e.g. IOC containers, or what Angular uses (service locators).
I've seen a similar debate play out in the Python world and the debate seems to polarize into two camps:
"You have never built anything complex enough and therefore you don't understand the benefits of DI/IOC"
vs.
"You've come to a dynamic language from some verbose public static void main hell-hole and are suffering from some form of Stockholm Syndrome"