c# - 这个领域模型正确吗?
问题描述
注意:我不确定这是否是此类问题的正确位置。尽管大多数问题都是关于代码的,但我也看到了一些关于 UML 和图表的问题。请让我知道如果我做了一个oopsie,我会立即删除这篇文章。此外,这篇文章将包含相当多的代码,因此我可以更好地解释代码中发生了什么。
我开始为我的代码开发域模型(我知道,域模型应该是第一个),但是我在弄清楚我的类之间的箭头应该是什么样子时遇到了问题。从我所读的内容中,我有了一个小小的想法,但我仍然很困惑。
首先,这是我的域模型的链接。
User
在创建一个新的类时用作模型AppUser
,该类是IdentityUser
.
AppUser
仅在您需要时使用Login
。我真的不确定这两个类之间是否有任何关系。下面你可以看到这两个类一起涉及的唯一部分。
public async Task<IActionResult> Login(Login login)
{
if (ModelState.IsValid)
{
AppUser appUser = await userManager.FindByEmailAsync(login.Email);
if (appUser != null)
{
await signInManager.SignOutAsync();
Microsoft.AspNetCore.Identity.SignInResult result = await signInManager.PasswordSignInAsync(appUser, login.Password, false, false);
if (result.Succeeded)
return Redirect(login.ReturnUrl ?? "/");
}
ModelState.AddModelError(nameof(login.Email), "Login Failed: Invalid Email or password");
}
return View(login);
}
RoleEdit
并RoleModification
用于将条目分配给来自dbo.AspNetUsers
的角色dbo.AspNetRoles
。
public async Task<IActionResult> Update(string id)
{
IdentityRole role = await roleManager.FindByIdAsync(id);
List<AppUser> members = new List<AppUser>();
List<AppUser> nonMembers = new List<AppUser>();
foreach (AppUser user in userManager.Users)
{
var list = await userManager.IsInRoleAsync(user, role.Name) ? members : nonMembers;
list.Add(user);
}
return View(new RoleEdit
{
Role = role,
Members = members,
NonMembers = nonMembers
});
}
[HttpPost]
public async Task<IActionResult> Update(RoleModification model)
{
IdentityResult result;
if (ModelState.IsValid)
{
foreach (string userId in model.AddIds ?? new string[] { })
{
AppUser user = await userManager.FindByIdAsync(userId);
if (user != null)
{
result = await userManager.AddToRoleAsync(user, model.RoleName);
if (!result.Succeeded)
Errors(result);
}
}
foreach (string userId in model.DeleteIds ?? new string[] { })
{
AppUser user = await userManager.FindByIdAsync(userId);
if (user != null)
{
result = await userManager.RemoveFromRoleAsync(user, model.RoleName);
if (!result.Succeeded)
Errors(result);
}
}
}
if (ModelState.IsValid)
return RedirectToAction(nameof(Index));
else
return await Update(model.RoleId);
}
一个Application
可以有很多Releases
。如果一个应用程序被删除,它的发布也将被删除。另外,Application
必须发出一个单Environment
(如Development、Testing等)
一个Release
可以有很多Phases
。如果一个版本被删除,它的阶段也将被删除。与应用程序相同,Release
必须向单个Stage
.
一个Phase
可以有很多Tasks
。如果一个阶段被删除,它的任务不会被删除。
一个Task
可以有很多Dependencies
。
AppIdentityDbContext
是用于与数据库连接的类。
ErrorViewModel
是一个我只用过一次的类,并不是很重要。它应该保留在领域模型中吗?
我想就差不多了。我给你链接的领域模型还没有完成,因为我不确定我是否做对了。您可以给我的任何帮助、建议和提示都非常重要和欢迎!
感谢阅读这篇冗长文章并可以帮助我的人。
解决方案
login 和 user...login 之间的关系用于从登录表单中捕获信息,然后您使用该信息在系统中查找用户并验证他们是否在系统中。它们在您的域模型中没有链接,因为登录类有一个返回 url,以防它们需要被重定向,并且仅用于登录某人。它们具有单独的功能,并且在以 MVC 模式编程的前提下,您正在分离您的担心这是一个很好的做法。
ViewModel 是模型,因此您可以将域数据公开给您的视图,但它不是域的一部分,因此 ErrorViewModel 不需要将其包含在您的图表中。
如果修改历史对您很重要,我会为您认为跟踪该信息很重要的类建议一个 ModifiedBy 和 ModifiedDate 字段。您还可以添加另一个字段“已删除”,因此如果有人删除了不应该删除的内容,您可以恢复该更改。您还可以向用户添加“LastLogin”日期时间字段以跟踪用户活动。