我正在开发一个内部使用Akka actor实现的反应库。我们来调用这个库server
。该库将单一类型的Actor公开为其API。此Actor接受定义其公共接口的不同类型的消息。让我们说这些消息被定义如下。
sealed trait Request
case class Creation(name: String) extends Request
sealed trait Response
case class CreationAck(name: String) extends Response
现在,我还必须实现一个使用上述库的程序。我们称这个程序为client
。该程序还将使用Akka Actors与库集成,例如使用 ask模式(应用程序的其余部分不是使用actor开发的)。
implicit val timeout = Timeout(5 seconds)
def create(): Future[CreationAck] = (mainActor ? Creation).mapTo[CreationAck]
// And so on...
显然,要编译上述代码,Creation
和CreationAck
都必须提供server
和client
类型。
我的问题是:在这两个项目中,哪个是分享Creation
和CreationAck
等公共消息的最佳方法?要构建每个程序,我使用 sbt 。
答案 0 :(得分:2)
使用server
库打包消息,因为消息代表了库的公共API。任何希望使用此库的程序都可以导入必要的server
包和类。
如果消息是server
和client
(以及可能还有其他)实现的接口,那么为消息创建单独的项目会很有意义。但根据您的描述,情况并非如此。相反,消息以及消息是API的实现与server
特别相关。 client
不以任何方式实施这些消息;它只是server
库的用户。
重申一下,消息是server
的公共API,并且与该库紧密耦合。邮件应与server
捆绑在一起。
答案 1 :(得分:1)
我建议你创建另一个项目(例如:messages
)并在其中实现这些类型的公共对象和类。
然后,导入要在其中使用项目的库。在您的情况下,请将其添加到build.sbt
和server
项目中的client
个文件中。
通过这样做,您将能够在不同的项目中使用相同的类。