Всем привет! В первой заметке я достаточно поверхностно упомянул о создании цепочки поведений.
В этом я хочу привести пример простой цепочки с пояснениями.
Со своей стороны буду рад критике и комментариям по поводу кода.
Итак, давайте представим, что наша цель — универсальный интерфейс для хранения пар ключ-значение, не вдаваясь в подробности реализации.
Все, что мы хотим сделать на первом этапе, — это определить, какой интерфейс будет у «рабочей» части:
Интерфейс очень простой и никак не определяет, где хранятся значения — в дереве, хеш-таблице или простом списке.-callback list_items() -> [term()].
-callback add_item(Id :: term(), Value :: any() )->ok|{error, any() }.
-callback get_item(Id :: term()) -> {ok, Value::any()}|{error, not_found}.
-callback del_item(Id :: term()) -> ok|{error, not_found}.
Следующий момент — какую бы реализацию мы ни собирались определить, она обязательно будет иметь внутреннее состояние — то самое дерево, таблицу или список.
И для его хранения мы будем использовать стандартный gen_server. То есть у нас будет код, реализующий интерфейс, опирающийся на состояние, предоставляемое модулем, реализующим gen_server. Вот она, цепочка.
Теперь настал момент инициализации.
При запуске модуля реализации мы должны вместо него запустить интерфейсный модуль, а он, в свою очередь, обратится к gen_server.
Где-то так:
Выполнение: start_link(_Params)->
Теги: #Erlang/OTP #Erlang/OTP
-
Про Google Снимут Фильм
19 Oct, 24 -
«Интерфакс» Покупает «Финмаркет»
19 Oct, 24