Нет никакой разницы напрямую. Однако использование gen_server:call
(или cast
) напрямую означает, что вы связываете свои другие модули с внутренними частями gen_server
. Представьте себе, что позже вы захотите изменить регистрацию brother
, чтобы она использовала что-то другое (например, внешнюю библиотеку, такую как gproc). Теперь вам нужно найти и найти все места, где вы использовали gen_server:call(brother, ...)
и исправить это, и дублируют много кода для получения имени сервера и так далее. В целом это просто намного проще brother:function(...)
То же самое относится к изменению внутренней структуры вызовов или приведения. Становится намного проще просто передать все в качестве аргументов функции, а затем использовать эту функцию для построения параметров. Например, скажем, вы используете эту функцию для создания записи, которая является внутренней по отношению к модулю.
Итак, в целом речь идет в основном об инкапсуляции и разделении задач. Модуль, как правило, должен позаботиться о том, чтобы найти подходящий сервер для отправки вызова и правильный формат для вызовов.