amacgregor
I wanted to reach out to the community and see who is using design patterns and what are the ones that are relevant to FP and Elixir, as well as an overall discussion on the validity and applicability of patterns.
Now, let me start with a couple of statements that might be valuable (I might be wrong; feel free to comment):
- Design patterns are not recipes, meaning their value is not to be implemented to the letter
- Most Creational and Structural patterns have little to no use in the functional programming world.
- For FP and Elixir, the most valuable and applicable patterns are going to be architectural and behavioral
Within that realm, there are a few patterns that I have identified that seem useful:
- Circuit Breaker for managing calls to external services
- Event Sourcing for situations that require a highly reliable audit log; CQRS is also relevant
Curious what else is being used and tried for example Sagas? Proxy? Strategy? Maybe some unique to Functional languages?
Trending in Questions
Hey guys,
I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly
Do you guys have any suggestions what is the best prac...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
Hello,
I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter).
The diffic...
New
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
Anyone here using Honeybadger?
My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of
Bandit.HTTPError...
New
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
Other Trending Topics
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
There are three potential reasons for members of this forum to have a look at https://vutuv.de
You are tired or annoyed of LinkedIn.
Yo...
New
Aludel - LLM Evaluation Workbench
Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #elixirconf-us
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming











Showing Posts 1 to 7- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
tomekowal
There is the Token pattern that is very common in many Elixir libraries. Designing Token APIs for Architecting Flow in Elixir · rrrene
I had a talk on it https://www.youtube.com/watch?v=arYOSYrjC8s but I didn’t know the name yet
amacgregor
Nice, thanks for sharing this.
kokolegorille
I have been translating this book…
…from Node to Elixir
I really like DDD and Event sourcing, I feel Elixir is a good fit for this kind of reactive programming.
It’s not a pattern, but I like to define domain events first.
al2o3cr
A good place to start is the OTP Design Principles User’s Guide which describes the supervision and communication patterns used by the OTP + BEAM infrastructure.
One technique that’s seems a lot more common in languages with pattern matching is defunctionalization (and another presentation) - note that both of these require a little Haskell to fully understand the examples, but it looks kinda like Erlang.
amacgregor
I don’t disagree as being a good place to start, and for example, the documentation on gen_statem is pretty good, but I have the feeling this is too specific to elixir/erlang and too low level.
What I’m trying to collect is a bit higher level patterns and their applicability, pros, cons, and general notes on each of those patterns. For example, the Circuit breaker pattern has clear applicability when having to rely on external services or even local services but built in a different language which could common cases on certain implementations.
Event Sourcing/CQRS has value if high traceability / detailed audit logs are required like for example an Order Management System or Inventory tracking.
State pattern via GenStateMachine might highly applicable for things like booking engines or shopping cart.
Other patterns that are more microservice specific like Sagas might be also applicable for larger systems.
I have seen the implementation of singletons in elixir but I’m undecided if those make sense.
This is really interesting, and I hadn’t heard about it before. Thank you for the links.
al2o3cr
There’s a lot of patterns described in the OTP design principles doc, but they aren’t as obvious as in OOP:
the OTP model is an implementation of the Actor pattern, using message-passing processes to emulate mutable state
I don’t know of a name for it, but the “tree of supervisors that restart children” patten is really important for producing a reliable system
the minimum-weight implementation of the Strategy pattern in BEAM languages is the module / function / args tuple (MFA tuple) that’s used in lots of places
gen_statemdoes implement a version of the State pattern, but the quantum of change is the function (changing the machine’s state changes which handlers are called) and not the moduleAlso take a look at things in Elixir like
DynamicSupervisorandRegistryused together.amacgregor
Thank you so much this was really good