这个领域模型是否正确?
Is this Domain Model correct?
注意:我不确定这是否是此类问题的正确位置。虽然大多数问题都是关于代码的,但我也看到了一些关于 UML 和图表的问题。请让我知道我是否做过 oopsie,我会立即删除此 post。此外,post 将包含相当多的代码,因此我可以更好地解释代码中发生的事情。
我开始为我的代码开发域模型(我知道,域模型应该是第一个)但是我在弄清楚 classes 之间的箭头应该是什么样子时遇到了问题。根据我的阅读,我有了一些想法,但我仍然很困惑。
首先 this 是我领域模型的 link。
User
在创建新的 AppUser
时用作模型,class 是 IdentityUser
.
的实现
AppUser
只在你想Login
的时候使用。我真的不确定这两个 class 之间是否有任何关系。您可以在下面看到这两个 class 一起涉及的唯一部分。
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
是一个class用于与数据库的连接。
ErrorViewModel
是一个class,我只用过一次,不是很重要。它应该保留在域模型中吗?
我想差不多就这些了。我给你 link 的领域模型还没有完成,因为我不确定我做的是否正确。您能给我的任何帮助、建议和提示都非常重要,欢迎!
感谢阅读这篇冗长文章的人 post 并且可以帮助我。
登录和用户之间的关系...登录用于从登录表单中捕获信息,然后您将使用该信息在系统中查找用户并验证他们是否在系统中。它们没有链接到您的域模型中,因为登录名 class 有一个 return url 以防它们需要被重定向,并且仅用于登录某人。它们具有单独的功能,并且在在 MVC 模式中编程的前提是你正在分离你的关注点,这是一个很好的做法。
ViewModel 是模型,因此您可以将域数据公开给您的视图,但它不是域的一部分,因此 ErrorViewModel 不需要将它包含在您的图表中。
如果修改历史记录对您很重要,我建议您为 classes 设置一个 ModifiedBy 和 ModifiedDate 字段,您认为跟踪该信息很重要。您还可以添加另一个字段 'Deleted',这样如果有人删除了不应该删除的内容,您可以恢复该更改。您还可以向用户添加“LastLogin”日期时间字段以跟踪用户 activity。
注意:我不确定这是否是此类问题的正确位置。虽然大多数问题都是关于代码的,但我也看到了一些关于 UML 和图表的问题。请让我知道我是否做过 oopsie,我会立即删除此 post。此外,post 将包含相当多的代码,因此我可以更好地解释代码中发生的事情。
我开始为我的代码开发域模型(我知道,域模型应该是第一个)但是我在弄清楚 classes 之间的箭头应该是什么样子时遇到了问题。根据我的阅读,我有了一些想法,但我仍然很困惑。
首先 this 是我领域模型的 link。
User
在创建新的 AppUser
时用作模型,class 是 IdentityUser
.
AppUser
只在你想Login
的时候使用。我真的不确定这两个 class 之间是否有任何关系。您可以在下面看到这两个 class 一起涉及的唯一部分。
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
是一个class用于与数据库的连接。
ErrorViewModel
是一个class,我只用过一次,不是很重要。它应该保留在域模型中吗?
我想差不多就这些了。我给你 link 的领域模型还没有完成,因为我不确定我做的是否正确。您能给我的任何帮助、建议和提示都非常重要,欢迎!
感谢阅读这篇冗长文章的人 post 并且可以帮助我。
登录和用户之间的关系...登录用于从登录表单中捕获信息,然后您将使用该信息在系统中查找用户并验证他们是否在系统中。它们没有链接到您的域模型中,因为登录名 class 有一个 return url 以防它们需要被重定向,并且仅用于登录某人。它们具有单独的功能,并且在在 MVC 模式中编程的前提是你正在分离你的关注点,这是一个很好的做法。
ViewModel 是模型,因此您可以将域数据公开给您的视图,但它不是域的一部分,因此 ErrorViewModel 不需要将它包含在您的图表中。
如果修改历史记录对您很重要,我建议您为 classes 设置一个 ModifiedBy 和 ModifiedDate 字段,您认为跟踪该信息很重要。您还可以添加另一个字段 'Deleted',这样如果有人删除了不应该删除的内容,您可以恢复该更改。您还可以向用户添加“LastLogin”日期时间字段以跟踪用户 activity。