Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / EF создавать лукап поля в модели / 10 сообщений из 10, страница 1 из 1
02.12.2021, 18:01
    #40116782
dotnetmobile555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
Коллеги, насколько корректно писать вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class User
    {
        [Key]
        public Guid Id { get; set; }
        ...
        public List<RefreshToken> RefreshTokens { get; set; } = new List<RefreshToken>();
    }



вместо
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class User
    {
        [Key]
        public Guid Id { get; set; }
        ...
        public List<RefreshToken> RefreshTokens { get; set; }
    }



?

ИМХО
Первый вариант удобнее что бы на налл не проверять при добавлении
...
Рейтинг: 0 / 0
02.12.2021, 18:25
    #40116792
dotnetmobile555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
например тут
Код: c#
1.
user.RefreshTokens.Add(refreshToken);



а с другой стороны, все равно хорошо бы на налл проверить
...
Рейтинг: 0 / 0
02.12.2021, 22:03
    #40116855
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
dotnetmobile555,
инициализировать все принято в конструкторе.
...
Рейтинг: 0 / 0
02.12.2021, 22:23
    #40116860
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
dotnetmobile555
Коллеги, насколько корректно писать вот так
я писал, проблем не было
...
Рейтинг: 0 / 0
02.12.2021, 22:34
    #40116863
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
vb_sub
инициализировать все принято в конструкторе.

кем принято?
...
Рейтинг: 0 / 0
02.12.2021, 23:00
    #40116868
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
Shocker.Pro
vb_sub
инициализировать все принято в конструкторе.

кем принято?

конечно по рукам Вам никто не ударит, если свойство класса будет проинициализировано таким образом
Код: c#
1.
 public List<RefreshToken> RefreshTokens { get; set; } = new List<RefreshToken>();


скорее всего при растворении синтаксического сахара и окажется, что инициализация переносится в конструктор.
Я не настаиваю что все должны делать инициализации в конструкторе, но если необходимы пруфы, то сошлюсь на пару источников
дока от МикрософтаConstructors enable the programmer to set default values, limit instantiation, and write code that is flexible and easy to read
Судя по коду ТС хочет проверять на NULL RefreshTokens перед добавлением элемента, чтобы exception не получить, но если лист будет проинициализирован в конструкторе, то проверять не надо.
ВикипедияОдна из ключевых особенностей ООП — инкапсуляция: внутренние поля класса напрямую недоступны, и пользователь может работать с объектом только как с единым целым, через открытые (public) методы. Каждый метод, в идеале, должен быть устроен так, чтобы объект, находящийся в «допустимом» состоянии (то есть когда выполняется инвариант класса), после вызова метода также оказался в допустимом состоянии. И первая задача конструктора — перевести поля объекта в такое состояние
Здесь скорее вопрос вкусовщины- концентрировать логику инициализации в одном месте (конструкторе) или размазывать по классу.
С другой стороны конструктор особо чего-то выдающегося помимо инициализации и не делает- так зачем отбирать у него и эту функциональность.
...
Рейтинг: 0 / 0
02.12.2021, 23:13
    #40116870
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
vb_sub
но если необходимы пруфы, то сошлюсь
ссылок не найдено

vb_sub
скорее всего при растворении синтаксического сахара и окажется, что инициализация переносится в конструктор.
Да

vb_sub
Судя по коду ТС хочет проверять на NULL RefreshTokens перед добавлением элемента, чтобы exception не получить, но если лист будет проинициализирован в конструкторе, то проверять не надо.
Если set будет публичный, то надо. Причем независимо от того, в конструкторе или в инициализаторе выполнена инициализация (см. выше - это одно и то же). Для обычных классов стараются делать readonly свойства, но это класс EF-сущности. Кстати, возможно EF сможет работать с сущностью, даже если там будет readonly List, по крайней мере десериализатор конфигурации такое легко съедает. Тогда можно будет проинициализировать и забыть.

vb_sub
так зачем отбирать у него и эту функциональность.
действительно, нафига MS сделали инициализаторы! Запретить!
...
Рейтинг: 0 / 0
03.12.2021, 00:02
    #40116880
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
vb_sub
dotnetmobile555,
инициализировать все принято в конструкторе.

есть орм, где создание инстанса можно производить без вызова конструктора, дот нет это допускает..
так что ничего тут страшного нет имхо
...
Рейтинг: 0 / 0
03.12.2021, 01:06
    #40116888
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
Где-то в степи
где создание инстанса можно производить без вызова конструктора

Это как?
...
Рейтинг: 0 / 0
03.12.2021, 09:59
    #40116951
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF создавать лукап поля в модели
fkthat,
несколько лет назад копаясь в исходниках orm находил инстанс не через активатор, а через
FormatterServices.GetUninitializedObject, ка бы понятна была мысль, ( за счет короткого хода поднять скорострельность).
но имхо это из казуистики и спитчей на собеседованиях. гы
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / EF создавать лукап поля в модели / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]