ElixirForum
Hello, my beloveds, I was trying to reach in the best practices with some of my work colleagues @liryanne and @tom335, but we were not able to find an answer to this question. In this way, I would like to ask your opnion about a codding pattern that I could not find anywhere.
When using defdelegate
and writing the needed @spec
to my methods, where is the correct place to set these @spec
s?
Example:
ModuleA:
defmodule ImplementationModule do
@spec inspect_data(data :: any()) :: {:ok, data :: any()}
def inspect_data(data) do
IO.puts("Inspecting_data...")
{:ok, IO.inspect(data)}
end
end
ModuleB which is the public interface for the internal ModuleA (and in a real case, lots of other internal modules):
defmodule DelegateModule do
@spec inspect_data(data :: any()) :: {:ok, data :: any()}
defdelegate inspect_data(data), to: ImplementationModule
end
IMHO, it gets redundant re-writing the @spec twice, this is the pattern I’ve been currently using, because this is my team’s project pattern, but I really would love to know what would be the best recommendation for this scenario