如何实现依赖数据的领域实体及其业务逻辑

问题描述 投票:0回答:1

假设我们有多个站,每个站有很多站机器,没有站id,站机器就不能存在。 每台机器可以有不同的插座,并且每台机器都有特定的品牌。 应用程序需要创建一个站及其所有依赖的机器。

这意味着我们需要先创建站点,然后通过机器,但是站点取决于机器。

域实体道具:

IStationProps {
  name: string;
  machines: Machine[];
  location: string
}

IMachineProps {
   name: string;
   sockets: Socket[],
   
}

ISocket {
   name: string;
}

IBrand {
  name: string
}

如果请求包含套接字列表,该列表可以是系统中已有的,也可以是在创建站时创建的。

如何验证套接字(如果它们已存在于系统中)并且如果给定的 id 无效,我们需要将其作为新条目。

示例

"socket": [
        {
          "socket_id": "some_id",
          "name" : "Alpha" 
        },
        {
         "name": "delta"
        },
        {
         "socket_id": "some_id_which_is_not_in_db"
         name: "gamma"
        }
      ]

这里,验证所有套接字后,还需要在系统中创建第二个和第三个套接字 ID,并将其添加到站机中。品牌也是如此。

另外,在下面的代码中,机器列表还需要验证工作站 ID 作为创建机器,并且工作站需要机器作为创建列表,如何处理这种依赖情况?

const machines = Machines.create(machines_array) 

const station = Station.create({
        name,
        machines 
      });
typescript domain-driven-design subdomain entities clean-architecture
1个回答
0
投票

我会将问题分解为相互依赖关系,例如:

  • 一个站有很多机器
  • 一台机器有很多插座
  • 一个socket必须有一个id

幸运的是,has muchhas one 关系之间不存在循环依赖关系。这意味着您可以自下而上构建领域模型。

const sockets = Sockets.filter(sockets_array);
const machines = Machines.create(machines_array.map(m => {...m, sockets: sockets}));
const station = Station.create({name, machines});

这或多或少是伪代码,但希望您能理解。从关系的底部开始,找出需要更改的内容,然后逐步建立到最顶层的父级。

© www.soinside.com 2019 - 2024. All rights reserved.