如果我要构建新模块,但首先要定义他们必须满足的模板(接口/合同),我应该使用行为,还是有一些更受欢迎的解决方案?显然,我想以这样一种方式构建我的 [非平凡的] 模块,以便以后可以放入该功能的不同实现中。
我想确保我正在建立适当和有效的习惯,并且搜索不会出现有关该主题的即时/有用信息。
谢谢。
如果我要构建新模块,但首先要定义他们必须满足的模板(接口/合同),我应该使用行为,还是有一些更受欢迎的解决方案?显然,我想以这样一种方式构建我的 [非平凡的] 模块,以便以后可以放入该功能的不同实现中。
我想确保我正在建立适当和有效的习惯,并且搜索不会出现有关该主题的即时/有用信息。
谢谢。
在 erlang 中,您可以让模块具有相同类型的相同方法,这就足够了。如果您想确保存在某种规范和/或合同,您可以使用带有行为的 R15 功能并-callback
制作透析器可以为您检查的类型规范。除此之外,通常的好想法也适用:将您从抽象中获得的值视为模块外部的抽象。否则,简单的直接替换不会那么有效。
我经常通过接口模块在 erlang 中进行抽象。说我正在写应用程序foo
。我经常有一个模块foo
,这个模块是使用应用程序的唯一方法。您不得以任何其他方式调用应用程序。对于较大的系统,公开暴露的模块更多,但基本思想是保持暴露列表较小。
这确保您可以根据需要重写分解模块背后的内容。您可以决定添加更多进程、更改监督树等。
Erlang 中的关键通常是指定进程之间的协议。并保持稳定。该协议强制解耦,因为进程无法共享状态,这对您以后想要重新设计部分代码时有利。
行为基本上是你唯一的选择:(我大量使用它们来达到这个目的,但我真的很想有一些更类似于 ML 仿函数的东西。
对于小于模块规模的接口,有类型注释的高阶函数,也是次优的。