[erlang-questions] Best practices in gen_fsm usage

Maxim Treskin zerthurd@REDACTED
Wed Dec 7 08:56:01 CET 2011


On 7 December 2011 14:49, Thomas Lindgren <thomasl_erlang@REDACTED> wrote:

> >________________________________
>
> > From: Maxim Treskin <zerthurd@REDACTED>
> ...
> >
> >1. gen_fsm incompatible with gen_server. We cannot use synchronous call
> from gen_server for gen_fsm because it different.
> >2. Two different actions: send_event и send_all_state_event with
> different handlers. Why? If we want to send message to FSM, we just send
> message to process without knowledge of its internal state-related issues,
> right?
> >3. For complex protocols and when one message emits almost equal actions
> in various process states, code of gen_fsm-process becomes
> pumpkinized. Every time I start writing a new gen_fsm module, I think that
> this time the code will not become pumpkinized, but this wrong. Large
> number of pattern matching with records in events and internal state of
> process in various state handlers makes code duplicated and unreadable.
> >
> >
> >Is there any best practices in gen_fsm usage? May be I and other people
> uses gen_fsm improperly?
> >
>
> Regarding points 1 and 2: My favorite approach to using gen_fsm,
> gen_server etc is to define all the calls to the server/fsm/... as an API,
> often in the server module itself. The client then just uses these API
> functions, while it's the job of the provider module to wrangle the raw
> gen_* calls.
>
> Yes, this solution is acceptable, but it is yet another redundant layer of
abstraction.


> Best,
> Thomas
>



-- 
Maxim Treskin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20111207/20e03d9d/attachment.htm>


More information about the erlang-questions mailing list