Это вопрос самоуверенный, так что вот мой самоуверенный ответ.
Вы должны следовать этим принципам и соглашениям, если:
- Проект, который вы строите, предназначен для вашей собственной практики.(Практика передовой практики h3h3)
- Проект, который вы создаете, будет поддерживаться кем-то другим.(Проект будет проще поддерживать в будущем)
- Проект масштабный.(Структура будет чище, проще в обслуживании)
Вам не стоит беспокоиться об этом, если:
- Это одноразовый проект.(Вы быстро разберетесь с ним, используйте его немного и выбросите, в этом случае вы цените время выше всего остального)
Теперь, чтобы конкретно ответить на ваш случай отображения модели предметной области вПосмотреть.Почему это плохо?
При работе с объектами важно знать их место в программе (где я могу разместить свой код?).Почему бы просто не создать один объект со 100 полями и просто использовать его в каждом представлении / методе, потому что вы забудете, каков контекст методов и для чего они предназначены и какие поля принадлежат где.Помимо того, что у нас есть объект типа DataModel.cs
, мы знаем модель данных, но что она представляет?каков контекст?о чем эта программа?Так что теперь вы можете назвать BlogPost.cs
, чтобы внести ясность.
Единая ответственность является ключевой, объект / класс / функция отвечает только за 1 вещь и только 1 вещь.
BlogPost
- Сообщение в блоге DTO. BlogPostViewModel
- Данные, которые мы хотели бы показать пользователям. BlogPostInputModel
- Данные, которые мы хотели бы захватить, чтобы создать этоПост в блоге. CreateBlogPost(BlogPostInputModel im)
- Создать BlogPost
из BlogPostInputModel
SaveBlogPost(BlogPost bp)
- Сохранить BlogPost
в базе данных.
Надеюсь, вы понимаете, что эта дополнительная работа выполняется для создания самодокументируемого кода.
Если вам нужно отобразить BlogPostViewModel
, но захватить только BlogPostInputModel
, хорошо, что BlogPostViewModel
имеет некоторые свойства, которые BlogPostInputModel
, потому что они нужны нам для представления.
Обновление, дополнительные объяснения:
CreateBlogPost (BlogPostInputModel im) - Это чистая функция, которая принимает и вводит A и выплевывает B, чистая означает, что нет никаких побочных эффектов и не зависит от состояния.Итак, говоря, что если функция зависит от состояния, например, от времени, то если мы предоставим A, она может выплеснуть C или F в зависимости от того, какое сейчас время.Таким образом, его проще тестировать, и он всегда возвращает действительный BlogPost
.
SaveBlogPost (BlogPost bp) - это функция с побочным эффектом: запись в базу данных.Он просто использует действительный BlogPost и сохраняет его в базе данных.Такая функция будет в вашем репозитории, по сути, все управление вашим состоянием содержится в объекте репозитория.
Если мы сохраним BlogPost в базе данных внутри CreateBlogPost, если мы напишем тест, то потребуетсядля заполнения, а затем отменить изменения в базе данных для каждого теста.Это проблематично.