Правильна ли эта модель предметной области? - PullRequest
2 голосов
/ 06 января 2020

ПРИМЕЧАНИЕ: Я не уверен, что это правильное место для такого рода вопросов. Хотя большинство вопросов касаются кода, я также видел некоторые вопросы, касающиеся UML и диаграмм. ПОЖАЛУЙСТА, дайте мне знать, если я сделал упс ie, и я немедленно удалю этот пост. Кроме того, этот пост будет содержать довольно много кода, чтобы я мог лучше объяснить, что происходит в коде.

Я начал работать над моделью домена для своего кода (я знаю, модель домена) должен был быть первым), но у меня есть проблемы с выяснением, как должны выглядеть стрелки между моими классами. Из того, что я прочитал, я получил небольшую идею, но я все еще в замешательстве.

Во-первых 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 (например, Разработка, Тестирование и т. Д. c.)

A Release может иметь много Phases. Если релиз удален, его фазы также будут удалены. Как и в Приложениях, Release должен быть выдан одному Stage.

A Phase может иметь много Tasks. Если фаза удалена, ее задачи не будут удалены.

A Task может иметь много Dependencies.

AppIdentityDbContext - это класс, используемый для соединения с базой данных .

ErrorViewModel - это класс, который я использовал только один раз, и он не очень важен. Должно ли оно храниться в модели предметной области?

Я думаю, что это в значительной степени так. Модель предметной области, на которую я дал вам ссылку, еще не сделана, поскольку я не был уверен, правильно ли я поступаю или нет. Любая помощь, совет, советы, которые вы могли бы дать мне, невероятно важны и приветствуются!

Спасибо всем, кто прочитал этот длинный пост и смог мне помочь.

1 Ответ

0 голосов
/ 10 января 2020

Отношение между логином и пользователем ... логин используется для сбора информации из формы логина, затем вы используете эту информацию, чтобы найти пользователя в системе и убедиться, что он находится в системе. Они не связаны в вашей доменной модели, потому что класс входа в систему имеет URL-адрес возврата в случае необходимости перенаправления и используется для простого входа в систему. Они имеют отдельную функцию и при условии программирования в шаблоне MVC, которым вы являетесь разделение ваших проблем, что является хорошей практикой.

ViewModels - это модели, которые позволяют отображать данные домена для вашего представления, но не являются частью домена, поэтому ErrorViewModel не нужно включать их в диаграмму.

Если история изменений важна для вас, я бы предложил поля ModifiedBy и ModifiedDate для классов, которые, по вашему мнению, важно отслеживать эту информацию. Вы также можете добавить другое поле «Удалено», чтобы, если кто-то удаляет что-то, что не должно быть, вы можете отменить это изменение. Вы также можете добавить поле DateTime «LastLogin» для отслеживания активности пользователей.

...