基于Erlang接口的设计

基于Erlang接口的设计,erlang,Erlang,如果我要构建新的模块,但首先要定义它们必须满足的模板(接口/契约),我应该使用行为,还是有更首选的解决方案?显然,我希望以这样一种方式构建我的[非平凡的]模块,以便稍后可以插入该功能的不同实现 我想确保自己养成了正确而有效的习惯,并且搜索没有发现关于这个主题的即时/有用的信息 谢谢。行为基本上是你唯一的选择:( 为此我大量使用它们,但我真的希望有更类似于ML函子的东西 对于小于模块规模的接口,存在带有类型注释的高阶函数,这也是次优的。行为基本上是您唯一的选择:( 为此我大量使用它们,但我真的希望

如果我要构建新的模块,但首先要定义它们必须满足的模板(接口/契约),我应该使用行为,还是有更首选的解决方案?显然,我希望以这样一种方式构建我的[非平凡的]模块,以便稍后可以插入该功能的不同实现

我想确保自己养成了正确而有效的习惯,并且搜索没有发现关于这个主题的即时/有用的信息


谢谢。

行为基本上是你唯一的选择:( 为此我大量使用它们,但我真的希望有更类似于ML函子的东西


对于小于模块规模的接口,存在带有类型注释的高阶函数,这也是次优的。

行为基本上是您唯一的选择:( 为此我大量使用它们,但我真的希望有更类似于ML函子的东西


对于小于模块规模的接口,存在带有类型注释的高阶函数,这也是次优的。

在erlang中,您可以让模块具有具有相同类型的相同方法,这就足够了。如果您想确保存在某种规格和/或约定,您可以使用R15特性与Behavior我们的和
-回调
来制定一个透析器可以为您检查的类型规范。除此之外,通常的好主意也适用:将您从抽象中获得的值视为模块外的抽象值。否则,简单的插入式替换将不那么有效

在erlang中,我经常使用接口模块进行抽象。比如说,我正在编写应用程序
foo
。我经常使用一个模块
foo
,这个模块是使用应用程序的唯一方式。不允许以任何其他方式调用应用程序。对于较大的系统,有更多的模块公开,但基本的想法是保持曝光量小

这确保您可以根据需要重写分解模块背后的内容。您可以决定添加更多进程、更改监控树等


Erlang中的关键通常是在进程之间指定一个协议。并保持该协议的稳定性。该协议强制解耦,因为进程无法共享状态,这对您以后重新设计部分代码是有益的。

在Erlang中,您可以让模块具有相同类型的相同方法,这就足够了。如果如果您想确保存在某种规范和/或契约,您可以使用R15特性的行为和
-callback
来创建一个类型规范,透析器可以为您检查。除此之外,通常的好主意也适用:将您从抽象中获得的值视为模块外的抽象值。O换言之,简单的替换方法不会那么有效

在erlang中,我经常使用接口模块进行抽象。比如说,我正在编写应用程序
foo
。我经常使用一个模块
foo
,这个模块是使用应用程序的唯一方式。不允许以任何其他方式调用应用程序。对于较大的系统,有更多的模块公开,但基本的想法是保持曝光量小

这确保您可以根据需要重写分解模块背后的内容。您可以决定添加更多进程、更改监控树等

Erlang中的关键通常是在进程之间指定一个协议,并保持该协议的稳定性。该协议强制解耦,因为进程无法共享状态,这对您以后重新设计部分代码有利