scala – 具有外部数据库和RESTful web gui和服务的系统的正确设计是什么?

基本上我开始设计我的项目是这样的:

>玩! web gui框架(使用RESTful服务)
>用于RESTful服务的Spray Framework,连接到数据库,处理传入的数据,为web gui提供数据
>数据库.只有服务才有权访问它

现在我想知道,如果它真的是最好的设计.
事实上玩Play!我可以很容易地同时托管web gui和服务.
在可能的简单情况下,这将更容易测试和部署.
在需要高性能的复杂情况下,我仍然可以纯粹为gui运行一个实例,然后只为了服务而运行一些实例(即使它们中的每一个仍然可以提供全部功能).
另一方面,我不确定它是否会对性能造成太大影响(服务将处理大量数据,而不仅仅是来自网络gui).还有,它不是混合我应该保持分开的东西吗?

如果我决定将它们分开,我是否应该只允许通过RESTful服务连接到数据库?如何解决服务和web gui试图使用不同版本的数据库的问题?在这种情况下我应该使用版本化的REST协议吗?

—————–编辑——————
我目前的系统结构如下:

但我想知道通过将REST服务放入Play中来简化它是否有意义! gui web服务器直接.

—————–编辑2 ——————
这是说明我的主要问题的图表.
换句话说清楚一点:连接我的服务和网络gui并分享模型会不好?为什么?
因为优点也很少:

>减少服务和gui之间的配置
>无需数据传输
>不需要创建单独的访问层(可能是不利的,但在什么情况下?)
> gui /服务模型之间没有不一致(例如因为协议版本不同)
>更容易测试和部署
>没有代码重复(通常我们需要复制模型的大部分)

也就是说,这是图:

最佳答案 为什么需要RESTful服务来连接数据库?最玩!应用程序直接从控制器访问数据库.
Play! philosophy考虑通过服务层访问您的模型是反模式.如果您打算与其他(非Play!)应用程序或您控制之外的外部系统共享该数据,则服务层可能很方便,但除此之外,最好保持简单.但您也可以简单地从Play中公开RESTful接口!应用程序本身用于其他系统.

玩!是为了保持简单,避免过去困扰Java开发的过度设计的废话.

点赞