[HN Gopher] Catalog of Design Patterns (2017) ___________________________________________________________________ Catalog of Design Patterns (2017) Author : charlieirish Score : 91 points Date : 2022-03-14 17:21 UTC (5 hours ago) (HTM) web link (refactoring.guru) (TXT) w3m dump (refactoring.guru) | Zealotux wrote: | Always coming back to that one, the visual are great to quickly | remind me of what a given pattern aims to achieve. | mkranjec wrote: | Same here. I come back over and over again and always notice | something new. | lmarcos wrote: | 10 years ago, in my list of "Nice things to learn and do to be | serious about software engineering", Design Patterns was probably | in the top 3. Nowadays, it doesn't even make it to the top 20. I | can't really say why, though. I guess 10 years ago I was really | junior and I didn't know tons of stuff... It's not that nowadays | I know all the patterns, but it's just that the noun "design | pattern" already evokes in me red flags. | feanaro wrote: | I think a partial cause for the loss of importance is due to | design patterns being relatively oriented towards OOP. With the | move away from OOP and towards functional programming and type | theory, the term fell away because the design patterns relevant | in those domains are not really called "design patterns". | slaymaker1907 wrote: | Functional programming still has patterns, they are just | different patterns. For example, (let loop ([arg _]) ...) in | Scheme for iteration. Monads are another one. Another common | one is a foreach method/function for iteration over data | instead of using iterators. | akavi wrote: | > _Monads_ | | Are "just" an interface a data type can implement/obey (in | languages that support higher kinded interfaces) | | > _a foreach method /function for iteration over data_ | | Again, "just" an interface a data type can implement/obey. | [deleted] | tester756 wrote: | >It's not that nowadays I know all the patterns, but it's just | that the noun "design pattern" already evokes in me red flags. | | Me too, but if you think about it for a while, then design | pattern is just name for some approaches to some problems that | should improve communication by making it more precise. | TacticalCoder wrote: | On the other hand they're _really_ old now and, obviously, don | 't get that that old. So it's the kind of thing you learn once | and then you'll inevitably find the use for some of them, or | find them in codebases, for a very long time. | | I don't know if I to smile or lament that it's basically the | ones that were explained in the gang of four's Design Patterns | book... Nearly, what, 30 years ago now? (now I feel really old) | tabtab wrote: | A lot of times partially good ideas get overblown and create | "fad shrapnel" where they explode on the scene and get overused | and overhyped by the naive, Resume Oriented Programmers[1], or | book/article pushers. | | One of the most frustrating things about Design Patterns is | that it's never been clear when to use them and when not to. | Making a good choice often requires intimately knowing the | domain, and guessing the future well. Most us are lousy at | predicting the future. If we were any good at it, we'd be | golfing with Warren Buffett instead of figuring out why our | Java won't compile on a Monday. | | Their Visitor Pattern scenario is crying out for a database, by | the way. Don't reinvent a database in app code: you get | spaghetti objects. | | Apply YAGNI and KISS, and only add design patterns if there is | a clear and present need. | | [1] Buzzword collectors looking for their next gig and (mis) | using your business as their personal college or R&D lab. | galaxyLogic wrote: | > only add design patterns if there is a clear and present | need. | | I know what you mean, don't copy the designs explained in | design patterns books unless it makes sense. | | But to be clear on the wording, you don't really "add design | patterns" ever. Your code is your design, designed by you. If | there are recurring "patterns" in your code-solutions and | recurring in the sense that others use them too and have | documented them, then you can "see patterns" in your code. In | other words you can recognize some patterns, some recurring | structures in your code. | | Design Patterns are abstract entities you can not move them | around. You can only describe them. Therefore people have | tried to write books about them. You can only add code to | your source-files, not "patterns". Can you see recurring | patterns in your code? Maybe. If you think those recurring | patterns are good enough to communicate to others then you | may want to write a book or even just an email or HN post | about them. | | The problem I see with the existing design patterns books is | that a pattern describes a great solution in a specific | context. But contexts vary wildly. Part of the context is the | programming language used. They too vary wildly. So I think | the basic idea of Design Patterns is great, but in practice | their benefit may be limited depending on the | generality/applicability and quality of the patterns | described, in them books. | macintux wrote: | Related recent discussion: Python Design Patterns | | https://news.ycombinator.com/item?id=30649470 | hyuuu wrote: | very polished site, clear presentation of the information. I am | going to spread this around to my colleagues :) | mrosa__ wrote: | On topic https://youtu.be/tv-_1er1mWI | eshack94 wrote: | Super useful! Bookmarked this for future reference. The graphics | help a lot to understand the intentions and use case for each | pattern. | isaacaggrey wrote: | Far more arguably useful is the section on code smells, which is | unfortunately overshadowed by the design patterns: | https://refactoring.guru/refactoring/smells | mrosa__ wrote: | Actually one of the best resource on the topic | https://youtube.com/playlist?list=PLW-6wqFEcgTpdJ1c7x0Sw8tqR... | vjust wrote: | I suppose I'm prejudiced.. There's a whole load of "Design | Patterns" books that haven't had much of an impact, when you try | to read them, many of them have the author's pet idiosyncrasies | or preferences in how they interpret patterns. Things like | "Java/Python/C# Design patterns" are usually best avoided - | especially some authors whose experience is not sufficiently | deep, and they've not proven the patterns in a large # of | projects. | | Esp. with a language like Python, where classes are very light- | weight (compared with Java, say) , I've seen authors write some | dense/opaque English to describe their patterns.. When a book in | my coding language makes me, an experienced developer feel dumb | .. I can't be helped - either I'm dumb or the book is dumb .. | either way , I've wasted good money on yet another patterns book | - not again. | | I like these two brilliant American aphorisms to describe OOPs. | First : Everything in its place, and a place for everything. | Second : Data + Algorithms = Programs. | | With Languages like Python, Go, Rust, JavaScript where functions | can pretty much rule , and you employ classes where actually | needed, OOPs can be summed up as above. | | Java started the trend of overbearing classes bolted onto every | problem ("a solution looking for a problem"). | warrenm wrote: | Those are some pretty great glyphs! ___________________________________________________________________ (page generated 2022-03-14 23:00 UTC)