我之前关于数据库访问和服务抽象的问题的答案帮助我理解了在 SOA 中数据库服务应该提供公共 API,而不是对数据库的直接访问(SQL 或通过 ORM)。
现在,如果我想在 Erlang/OTP 应用程序中创建(SOA)服务,我认为它应该是 gen_server 或其他 OTP 行为,因为在这种情况下,API 将很容易定义并且服务本身可以很容易地合并到应用程序。
但是我应该如何将数据从服务传递给它的消费者呢?
我知道在 Ruby on Rails 中我可以做类似的事情
persons = Person.find(all)
然后我可以返回persons
服务消费者。
在 Erlang/OTP 中,如果persons
有几千条记录,我应该在 gen_server return 语句中传递它吗?这意味着 gen_server 将向其调用者(服务消费者)发送一条消息,并且该消息将实质上复制到 Erlang VM 中。我倾向于认为这不是对 Erlang 消息传递的正确使用。
所以我的问题是:
- 如何在 Erlang/OTP 中创建数据库服务 (SOA)?
- 这种服务的 API 应该使用 OTP 标准机制(如 gen_server 返回消息)还是其他任何东西?