如何在不同服务中共用一套model层

目前我们有四套系统,两套laravel框架写的,两套hyperf框架写的。共用一个数据库,导致的一个问题就是同一个Model类要在四个服务中写一遍,很是麻烦和繁琐,请问有什么方案可以解决这个问题吗?谢谢。
hyperflaravel都用的是Eloquent ORM。所以兼容问题还是可以解决的。
目前服务运行采用的是k8s+docker的方案。

阅读 3.4k
3 个回答

承邀:
使用grpc,swoole建立微服务,将model层放入微服务中。例如 @风中有php做的云 给到你的答案。我没有这样做过,不过可以给你一些思路。

1.新建一个仅有Eloquent ORM的项目。
2.将所有model放入这个项目。这是我们的model微服务,composer+复制粘贴即可完成
3.在你原有的项目中需要实现model本身的方法,ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable
4.最后,使用tcp或者http去通信你的微服务
5.微服务返回model实体
6.这样就无侵入的完成了model统一的需求

这仅仅是我的思路,未经过实践,建议不要使用在生产环境中。

MODEL归类的服务独立出去
举个例子 User的Model就是根据用户服务相关的 看能不能抽出一个服务 其他的通过http or rpc调用就好了

正常的服务设计是不应该出现 model 层共用, 一个 model 必然属于一个服务,外部只能通过服务提供的服务接口来调用.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题