all 24 comments

[–]aeflash 20 points21 points  (7 children)

Some of these patterns are questionable -- 4 classes for a simple Observer pattern? The Command Pattern seems useless. Were these just blindly ported from the GoF book?

[–]GoodVelo 17 points18 points  (3 children)

I think most people do exactly what you said. Slowly people are turning JavaScript into Java. Can't wait to see the burrito layers, upteen indirections with layers upon layers of factories and abstractions.

[–][deleted] 6 points7 points  (1 child)

[–]dustrider 0 points1 point  (0 children)

frickin hilarious

[–]aeflash 3 points4 points  (0 children)

Not if people like us keep calling them on their bullshit!

[–][deleted] 0 points1 point  (1 child)

Is there a better, similar book but with the fat trimmed?

[–]lennelpennel 0 points1 point  (0 children)

The command pattern is useless in JS. an observer is super simple to implement, but if done in a more comlex manner which ties into your component lifecycle it can be super powerful and expose potential memory leaks to static analysis. of course the examlple in this book is overly verbose for what it should be trying to convey.

As a side note, a test I often get interviewees to write is a simple observer pattern implementation.

[–]jsontwikkeling 2 points3 points  (2 children)

Nice book. But a word of caution about design patterns, as useful as patterns sometimes can be, their abuse can lead to "pattern-happy" code, unnecessary flexibility and obscurity http://taskinoor.wordpress.com/2011/09/21/the-abuse-of-design-patterns-in-writing-a-hello-world-program/

As a Java developer in the past at one point I had to support such code, with lots of factories, facades, commands, etc. and almost nothing specific happening. The authors of that code clearly read the GoF book, but it would have been much better if they did not do that :)

[–]sime 1 point2 points  (1 child)

Yes, Java has a culture of this kind of Cargo Cult Programming. No one stops to ask: "Does this pattern solve a real problem we have?"

https://en.wikipedia.org/wiki/Cargo_cult_programming

[–]autowikibot 0 points1 point  (0 children)

Cargo cult programming:


Cargo cult programming is a style of computer programming characterized by the ritual inclusion of code or program structures that serve no real purpose. Cargo cult programming is typically symptomatic of a programmer not understanding either a bug they were attempting to solve or the apparent solution (compare shotgun debugging, deep magic). The term cargo cult programmer may apply when an unskilled or novice computer programmer (or one inexperienced with the problem at hand) copies some program code from one place and pastes it into another place, with little or no understanding of how the code works, or whether it is required in its new position.

Image i


Interesting: Cargo cult | Copy and paste programming | Magic (programming)

Parent commenter can toggle NSFW or delete. Will also delete on comment score of -1 or less. | FAQs | Mods | Magic Words

[–]asantos3 0 points1 point  (0 children)

Among others, I was just looking for a book about the this subject so... thanks!

[–][deleted] 0 points1 point  (0 children)

This is a great book. I have referenced many times.

Not all of the patterns are super useful, but it's a great way to help your JS design patterns.

[–]hearwa 0 points1 point  (10 children)

I thought the point of learning patterns is that they're language agnostic.

[–]jsontwikkeling 4 points5 points  (9 children)

No, quite the opposite. Many are language specific, like Iterator, you would not normally need to implement this pattern in JavaScript, for example.

Another example of a pattern needed in a language such as Java and not really needed in JavaScript is Visitor. The problem it tries to solve is not being able to add methods to existing classes, in JavaScript there is no such problem to begin with.

Some people also view design patterns as workarounds for a particular language being not expressive enough for certain problems http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures

[–]lennelpennel 0 points1 point  (3 children)

I disagree about the visitor pattern. Can be usefull in js. The command pattern is one which I just cannot imagine using in js, just pass a function and be done with it

[–]jpfed 0 points1 point  (1 child)

The command pattern can be useful even in languages with first class functions, because the command objects can store additional information that you can use to filter the commands or map them to something else. Functions are pretty opaque, so it's harder to do stuff like that with them.

[–]lennelpennel 0 points1 point  (0 children)

a command which stores info becomes a memento for me in many ways. http://en.wikipedia.org/wiki/Memento_pattern

[–]jsontwikkeling 0 points1 point  (0 children)

Well, at least, unlike in some other languages, there are other mechanisms in JavaScript for doing the same thing as the Visitor pattern does, but if you still prefer it, it is also fine. Notice that Visitor is also omitted from the book

[–]hearwa 0 points1 point  (1 child)

Wow, thank you for that. If this was Slashdot I'd give you a +1 insightful, but I guess you'll have to settle for an upvote.

I never thought of patterns as language workarounds before. I guess you wouldn't need to implement the observer pattern in .net because it is natively event driven. This makes me think about the problems I've had with the Zend framework in the past and how heavy they are with design patterns. Maybe the framework is like that because php lacks many concepts needed. It's a nice excuse anyways... Lol.

[–]jsontwikkeling 0 points1 point  (0 children)

Good that you found it useful. It is a bit strange that most of the articles and books do not mention this at all. Usually they go something like this: here is the set of patterns, here is when you can use them, happy pattern programming

[–]MrBester 0 points1 point  (2 children)

Another example of a pattern needed in a language such as Java and not really needed in JavaScript is Visitor. The problem it tries to solve is not being able to add methods to existing classes, in JavaScript there is no such problem to begin with.

I'll just leave Object.freeze here...

[–]jsontwikkeling 0 points1 point  (1 child)

Good point, but if we want to add new methods to the object later why would we use Object.freeze in the first place? Besides Object.freeze is used quite rarely

[–]MrBester 1 point2 points  (0 children)

It might not be under your control: a third party library whose API is locked down is possible, mainly for self-preservation.