【发布时间】:2020-01-06 17:07:37
【问题描述】:
注意:我不确定这是否适合此类问题。尽管大多数问题都是关于代码的,但我也看到了一些关于 UML 和图表的问题。请让我知道如果我做了一个oopsie,我会立即删除这篇文章。另外,这篇文章将包含相当多的代码,所以我可以更好地解释代码中发生了什么。
我开始为我的代码开发域模型(我知道,域模型应该是第一个),但我无法弄清楚我的类之间的箭头应该是什么样子。从我读到的内容中,我有了一个小小的想法,但我仍然很困惑。
首先this 是我的域模型的链接。
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(例如开发、测试等)
一个Release 可以有多个Phases。如果一个版本被删除,它的阶段也将被删除。与应用程序相同,Release 必须发布给单个 Stage。
一个Phase 可以有多个Tasks。如果一个阶段被删除,它的任务不会被删除。
一个Task 可以有多个Dependencies。
AppIdentityDbContext是一个用于连接数据库的类。
ErrorViewModel 是一个我只用过一次的类,并不是很重要。它应该保留在领域模型中吗?
我觉得差不多了。我给你链接的领域模型还没有完成,因为我不确定我是否做对了。您能给我的任何帮助、建议和提示都非常重要,欢迎您!
感谢阅读这篇冗长文章并可以帮助我的人。
【问题讨论】:
-
AppUser 和 Login 在数据模型中不需要连接,连接是功能连接而不是数据连接。可以选择让 Login tecord 依赖于用户,但在这种情况下,您必须决定删除的用户。 ErrorViewModel 不会在模型中,因为它是视图模型类而不是对象域类。
标签: c# relationship domain-model