这个领域模型是否正确?

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);
}

RoleEditRoleModification 用于将来自 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。