<div dir="ltr">I'll admit, I didn't have whole-application patterns in mind when I brought it up, but it definitely seems like an area in Erlang worthy of discussion. Which is what design patterns are for: not just "it depends" but "on what" and "between these alternatives."<br><div><br></div><div>It also seems like Single Responsibility might apply to modules, even within a process. As a novice in Erlang, I think I was getting (read: misunderstanding) the message that module = process, partly from the pattern of exposing interfaces in the same module that defines a gen_server behavior (a practice now enshrined in an Elixir macro). I've been finding good outcomes from breaking up modules the same way e.g. you might break up a function into smaller ones. I'm sure I'm not the only one, right?</div><div><br></div><div>Judson</div><br><div class="gmail_quote">On Thu, Mar 5, 2015 at 3:55 PM Richard A. O'Keefe <<a href="mailto:ok@cs.otago.ac.nz" target="_blank">ok@cs.otago.ac.nz</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We've had a thread about the use or otherwise of design patterns in Erlang.<br>
I've also had some mail that had me thinking about this.<br>
<br>
One idea which already has a name is "Single Responsibility".<br>
The Wikipedia article <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank">http://en.wikipedia.org/wiki/<u></u>S<u></u>ingle_responsibility_<u></u>principle</a><br>
says it's about classes, but really it's nothing but cohesiveness<br>
by another name.<br>
<br>
In the context of Erlang,<br>
the idea is that each process should do one job.<br>
Advantages:<br>
<br>
   Suppose a process has two jobs, A and B.<br>
   And something about working on A makes it crash.<br>
   Now nobody is doing job B.<br>
<br>
   If we have two processes, they can execute on<br>
   different cores.<br>
<br>
Disadvantages:<br>
<br>
   If jobs A and B are coupled somehow, there will have<br>
   to be communication between the processes working on<br>
   them that there wouldn't be in a single process.<br>
<br>
Example:<br>
<br>
    Separating logging from working.<br>
<br>
______________________________<u></u><u></u>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/<u></u>list<u></u>info/erlang-questions</a><br>
</blockquote></div></div>