Typescript 域实体在干净体系结构中如何相互引用
根据Bob叔叔的实体定义: “该实体是纯粹的商业实体,而不是其他实体。” 我想澄清一下实体之间的业务逻辑关系。 假设我们有两个类,我们需要实现它们之间的关系。我看到3种选择:Typescript 域实体在干净体系结构中如何相互引用,typescript,architecture,clean-architecture,Typescript,Architecture,Clean Architecture,根据Bob叔叔的实体定义: “该实体是纯粹的商业实体,而不是其他实体。” 我想澄清一下实体之间的业务逻辑关系。 假设我们有两个类,我们需要实现它们之间的关系。我看到3种选择: 有一个客户端和宠物类(客户端一对多动物)。Animal类具有客户端ID class Client { private _clientID: ClientID; public getID(): ClientID { return this._clientID; } } class Animal {
class Client {
private _clientID: ClientID;
public getID(): ClientID {
return this._clientID;
}
}
class Animal {
private _animalID: AnimalID;
private _ownerID: ClientID;
public getID(): AnimalID {
return this._animalID;
}
public getOwnerID(): ClientID {
return this._ownerID;
}
}
class Client {
private _clientID: ClientID;
public getID(): ClientID {
return this._clientID;
}
}
class Animal {
private _animalID: AnimalID;
private _owner: Client;
public getID(): AnimalID {
return this._animalID;
}
public getOwner(): Client {
return this._owner;
}
}
A {
B {
C {
... and so on ...
}
}
}
事实上,我们必须初始化数据库中的每个实体,并将它们的实例注入到其他实体中
class Client {
private _clientID: ClientID;
public getID(): ClientID {
return this._clientID;
}
}
class Animal {
private _animalID: AnimalID;
public getID(): AnimalID {
return this._animalID;
}
}
4(额外)。没有灵丹妙药。每种情况都需要单独实施。(实体应该包含并建模最重要的业务规则。如果两个域对象之间的双向依赖关系是如此重要的业务规则,那么它应该反映在实体中
这可以通过使用ID链接实体或直接对象引用来实现。稍后,您可能会根据编程语言的支持为实体实现自定义相等和比较操作。我不太熟悉Clean体系结构。您是指?我想这会有所帮助我想知道这些实体是否对应于数据库记录,如果是,您将使用哪种类型的数据库?对于关系数据库,我更喜欢在Animal中存储客户端ID,以匹配多对一关系的SQL最佳实践。对于存储类引用的文档数据库,可能更有意义。@JesseHallette Bob说:“数据库可以用Oracle、MySQL、Coach、Datomic甚至是平面文件来实现。业务规则一点都不重要。这意味着数据库决策可以推迟,你可以在做出数据库决策之前集中精力编写和测试业务规则。”我们可以在自己实现域后决定要将哪种DB集成到业务逻辑中我刚刚发现了聚合根和域事件之类的东西,但不管怎样,你的回答描述了一个主要思想-一切都取决于业务规则。我过去常在RDB的上下文中思考,这就是我的问题。谢谢!