一起使用 Asp.Net 核心标识和 DDD(CQRS)

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

我正在用 CQRS 和 DDD 重构我的项目,我想使用 Asp.Net core Identity。

所以在聚合根实现中,我们将让实体继承自一个名为 Entity 的类,并且聚合将从一个名为 IAggregate 的接口继承,此外还有实体类,它在聚合根中定义聚合模型(如 Microsoft 文档中所述).

这里是问题:

为了告诉身份您的身份类是什么,您的类应该继承Identity(例如

IdentityUser<TKey>
)提供的身份类。 如果有一个名为 User 的聚合根,这个类将有两个继承:

   public class User : Entity, IAggregate
   {
       //Entity and model Codes
   }

现在为了实现身份用户,User类应该继承自

IdentityUser<int>
但是不能继承多个类。 我正在考虑一种方法,我可以创建一个通用抽象类,实现 DDD 的
abstract class Entity
基类和通用类型 T,它可以是不同实体所需的身份类,但它没有像我预期的那样工作并且那样做是不可能的。 那么有人知道一种可以继承身份类和 DDD 聚合类的方法吗?

c# asp.net-core asp.net-identity domain-driven-design
1个回答
0
投票

所以过了很久我才回到这篇文章并尝试检查我是否可以处理它,然后才发现整个标题都写错了。

标题应该是: 如何一起使用 Asp.Net Core Identity 和 DDD(聚合根)。

prev Title: Using Identity 4 and Aggregate root (DDD) at the same time

如果像我这样的人正在寻找解决方案,这就是我提出的解决方案:

我没有为我的身份类使用类“实体”(在 DDD 和 CQRS 设计中为实体定义的类),而是创建了“IdentityEntity”类(这些类是根据用户、用户角色、用户登录等身份要求实现的…… ,它们的实现与“实体”类相同),略有不同,它们继承自身份类(IdentityUser、IdentityRole 等),因此我可以遵循 DDD 规则并同时实现 Asp.Net Core Identity时间。

如果我们说我们有一些名为 User、Lesson、School、Role 的模型,模型实现将是这样的:

public class User : IdentityUserEntity, IAggregate
{
   //Model stuff here
}

public class IdentityUserEntity : IdentityUser<int>
{
   public int Id { get; set; }
   //Entity Codes
}

public class Role : IdentityRoleEntity //Model placed under User Aggregate
{
   //Model stuff here,
}

public class IdentityRoleEntity : IdentityRole<int>
{
   public int Id { get; set; }
   //Entity Codes
}

public class School : Entity, IAggregate
{
   //Model stuff
}

public class Lesson : Entity //Model under School aggregate
{
   //Model stuff
}

public class Entity
{
   //Entity Codes
}

我仍然期待更好的方法以更干净的方式处理域模型。

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