如何在域模型中使用 AspNet.Identity
How to use AspNet.Identity in a Domain Model
域模型应该对应用程序的问题域建模,但完全不知道其实现的某些方面;例如数据访问。
在这方面,将 Microsoft.AspNet.Identity.EntityFramework
添加到域模型感觉有点脏,因为域模型应该不知道(也不关心)我将使用 [=44= 来实现它]...
...这就是我的问题
在我的域模型中,我有几个 类 链接到用户帐户
例子
class Profile
{
public User Owner { get; set; }
}
class BlogPost
{
public User Owner { get; set; }
}
问题是 User
扩展了 IdentityUser
,因此引用了 EntityFramework。
我能想到的唯一解决方案是将对 User
的引用替换为 Guid
,只需链接所有者 ID
例子
class Profile
{
public Guid OwnerId { get; set; }
}
再一次,这感觉很脏,反对 OOP,而且不是很 SOLID
鉴于我想要尽可能优雅的解决方案,我该如何解决这个问题?
我同意你的观点,身份框架模型应该与其他模型分开。而且我认为您自己会在问题中给出答案。
如果不实施身份框架,模型是否完整?用户不是域模型的一部分,而是身份模型的一部分。但是,您正在链接到此 table.
我认为最好的解决方案是创建域用户 table 并将您的模型与该 table 相关联。您可以使用身份框架用户 GUID 作为密钥。这将在两个 table 之间创建一个 1:1 关系。
使用域用户 table 扩展用户 class(来自身份框架)以轻松访问域用户 table,以防您需要添加或删除用户。尽管 domain.user 不是身份框架的一部分,但您可以访问此 table 而无需将此 table 添加到身份框架模型本身。只需在用户 (IdentityUser) class.
中添加引用
如果您不想创建新用户 table,那么您可以添加一个域用户 class(不扩展 IdentityUser),它只公开您创建的(非关键)字段想阅读或更新。
域模型应该对应用程序的问题域建模,但完全不知道其实现的某些方面;例如数据访问。
在这方面,将 Microsoft.AspNet.Identity.EntityFramework
添加到域模型感觉有点脏,因为域模型应该不知道(也不关心)我将使用 [=44= 来实现它]...
...这就是我的问题
在我的域模型中,我有几个 类 链接到用户帐户
例子
class Profile
{
public User Owner { get; set; }
}
class BlogPost
{
public User Owner { get; set; }
}
问题是 User
扩展了 IdentityUser
,因此引用了 EntityFramework。
我能想到的唯一解决方案是将对 User
的引用替换为 Guid
,只需链接所有者 ID
例子
class Profile
{
public Guid OwnerId { get; set; }
}
再一次,这感觉很脏,反对 OOP,而且不是很 SOLID
鉴于我想要尽可能优雅的解决方案,我该如何解决这个问题?
我同意你的观点,身份框架模型应该与其他模型分开。而且我认为您自己会在问题中给出答案。 如果不实施身份框架,模型是否完整?用户不是域模型的一部分,而是身份模型的一部分。但是,您正在链接到此 table.
我认为最好的解决方案是创建域用户 table 并将您的模型与该 table 相关联。您可以使用身份框架用户 GUID 作为密钥。这将在两个 table 之间创建一个 1:1 关系。
使用域用户 table 扩展用户 class(来自身份框架)以轻松访问域用户 table,以防您需要添加或删除用户。尽管 domain.user 不是身份框架的一部分,但您可以访问此 table 而无需将此 table 添加到身份框架模型本身。只需在用户 (IdentityUser) class.
中添加引用如果您不想创建新用户 table,那么您可以添加一个域用户 class(不扩展 IdentityUser),它只公开您创建的(非关键)字段想阅读或更新。