Домен и классы Entity Framework Core

В настоящее время я слежу за проектом, разрабатываемым csharpfritz (из Microsoft). Это называется «корвики». Некоторая форма "википедии" вроде проекта. Вот ссылка на репозиторий на github: CoreWiki Джеффа Фрица В предметном классе для комментариев он пишет следующее:

Я пытаюсь понять, почему он создал класс сущности FromDomain и класс ToDomain:

// Main model

public class CommentDAO
{
    public int Id { get; set; }
    public int ArticleId { get; set; }
    public virtual ArticleDAO Article { get; set; }
    public string DisplayName { get; set; }
    public string Email { get; set; }

    [NotMapped]
    public Instant Submitted { get; set; }
    public string Content { get; set; }
}


public static CommentDAO FromDomain(Core.Domain.Comment comment)
{
    return new CommentDAO
    {
        AuthorId = comment.AuthorId,
        Content = comment.Content,
        DisplayName = comment.DisplayName,
        Email = comment.Email,
        Id = comment.Id,
        ArticleId = comment.ArticleId,
        Submitted = comment.Submitted
    };
}

public Core.Domain.Comment ToDomain()
{
    return new Core.Domain.Comment
    {
        AuthorId = AuthorId,
        Content = Content,
        DisplayName = DisplayName,
        Email = Email,
        Id = Id,
        ArticleId = this.Article.Id,
        Submitted = Submitted
    };
}

Спрашивает их. Мы можем делиться только своим собственным мнением, которое «не по теме» на Stack Overflow.

Gert Arnold 07.11.2018 17:10

Он отделяет DAO (объекты доступа к данным) от объектов домена. СМОТРЕТЬ Отделение модели предметной области от модели персистентности

Rui Jarimba 07.11.2018 17:11

Может быть, но DAO - вводящий в заблуждение неправильный термин, видя общее определение DAO.

Gert Arnold 07.11.2018 17:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
380
1

Ответы 1

Это просто отображение кода для сопоставления модели предметной области с объектом доступа к данным и наоборот. Вы можете реализовать это разными способами, например, как показал автор, или с помощью явных операторов преобразования, или с помощью такого инструмента, как AutoMapper.

См., Например, Отделение модели предметной области от модели персистентности (первое обращение Google «зачем отделять модель домена от dao») для объяснения того, почему вам это нужно.

Спасибо, я так и подозревал. Мое замешательство возникло из-за того, что он также использовал AutoMapper даже после того, как он сделал эту карту домена для объекта доступа к данным.

AllocSystems 07.11.2018 17:19

Использование AutoMapper поверх этого, вероятно, является излишним, но оно действительно служит для абстрагирования реальных методов API (ToDomain / FromDomain). Возможно, это было намерением: сохранить логику сопоставления с доменом, но при этом сохранить независимость приложения в отношении всего шебанга.

Chris Pratt 07.11.2018 17:37

Другие вопросы по теме