关联不同数据库中的两个实体以及两个应用程序之间的通信

Relating two entities in different databases and communication between two applications

小故事: 如何关联不同数据库中的两个实体?在微服务中,每个服务都有自己的数据库,不同数据库中的实体在微服务架构中如何相互关联?

长话短说:我正在编写两个独立但相关的应用程序,比方说一个二手车销售商管理系统和一个账户和财务系统。我希望我的应用程序能够相互协作并独立运行。

现在让我们假设在管理系统中完成了一项车辆交易,然后根据最终确定的交易数据,我将在财务系统中生成发票。同样,如果交易被删除,那么我也必须删除相应的发票,但要删除相应的发票,我想以某种方式将交易和发票相关联,但我不能简单地在实体之间建立关系,因为我想要我的应用程序完全独立,这也意味着不同的数据库。或者有没有办法在不同数据库中的两个表之间建立关系?将不同数据库的两个表关联起来是个好主意吗?

此外,我想要双向通信,例如,如果编辑了一个交易,那么它的相关发票也会被编辑,如果一个发票被编辑,那么它的相关交易也会被编辑,就像微服务一样,我同时想要系统能够 运行 独立并相互并存。

可能的解决方案:我现在唯一能想到的解决方案是拥有一个数据库和两个独立的应用程序层,但这种设计本身并不好,因为我已经使用了这种方法之前它有很多缺点。

技术栈:我的技术栈是.Net和MSSQL

我正在寻找设计过此类系统或以前遇到过类似问题的人的答案

使用 uuids 来识别您的实体并将它们作为简单的字符串引用。

How can I generate UUID in C#

例如:

{
  "Name" : "MyDeal",
  "Id" : "6a0e5244-2a85-4944-9be4-04c8cfbf3e45"
}

{
  "Name" : "MyInvoice",
  "Id" : "efed8b94-0065-4004-adcc-9f2d219fb6eb",
  "DealReference" : "6a0e5244-2a85-4944-9be4-04c8cfbf3e45"
}

不要使用普通的持久化,比如普通的数据库。参见