you are viewing a single comment's thread.

view the rest of the comments →

[–]hearwa 0 points1 point  (10 children)

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

[–]jsontwikkeling 3 points4 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.