powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Давно не кодил и такое увидел
12 сообщений из 12, страница 1 из 1
Давно не кодил и такое увидел
    #40037686
Фотография lans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня. Давно не работал разработчиком точнее года так 4. Подвернулся не большой проект WIn Forms + C# + ADO.NET и увидел я такую интересную штуку что Ienumerable<> пропертю заполняют прям из самой проперти. Это нормально по всем канонам современной разработки? Извиняюсь заранее если вопрос тупой

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        private IEnumerable<Doc> _Docs;
        public IEnumerable<Doc> Docs
        {
            get
            {
                if (_Docs == null)
                {
                    _Docs = DBManager.MGDocs.GetDocsByID(this.ID);

                }
 

                return _Docs;
            }
        
        }
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037687
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lans
Код: c#
1.
DBManager.MGDocs.GetDocsByID(this.ID);

Это ненормально.
Свойство не должно работать долго и обращаться к инфраструктуре.

Выносить в метод, к тому же асинхронный.
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037688
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lans
пропертю заполняют прям из самой проперти
сам по себе шаблон в принципе нормальный, свойство кешируется при первом обращении.
В современном шарпе записывается короче:

Код: c#
1.
get => _prop ??= CountProp()
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037689
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
lans
Код: c#
1.
DBManager.MGDocs.GetDocsByID(this.ID);


Это ненормально.
Свойство не должно работать долго и обращаться к инфраструктуре.

Выносить в метод, к тому же асинхронный.
Хотя тут я поторопился, возможно, если GetDocsByID возвращает Expression в чистом виде, то обращения не будет. Но тогда не очень понятен смысл кеширования, зачем тут вообще _Doc. В общем, так себе код....
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037692
IPmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

У нас тоже так на некоторых проектах. Я предложил такие проперти сразу заполнять когда и объект заполняется сам но не всегда пропертя эта может использоваться и нет смысла тянуть заранее данные. А как все же верно?
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037704
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IPmen
Shocker.Pro,

У нас тоже так на некоторых проектах. Я предложил такие проперти сразу заполнять когда и объект заполняется сам но не всегда пропертя эта может использоваться и нет смысла тянуть заранее данные. А как все же верно?
Делай метод с кешированием или Lazy, в чем проблема? Нафига проперти, которая смотрит во внешний сервис.
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037708
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потребитель класса предполагает, что при обращении к проперти он получает какой-то фрагмент состояния этого класса. А не запускает, длительные блокирующие операции, которые могут и поток подвесить и исключение вернуть.
И отладчик VS предполагает то же самое. И потом при отладке этого п...ца ты хватаешься за голову, когда у тебя студия хочет показать значения свойств и запускает сотню обращений к недоступной в контексте отладки базы.

(смайлик *wall*)

ЗЫ: К конструкторам это тоже относится. А то есть любители в конструктор обращение в БД запихать!
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037744
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не нормально. Но, если это так везде в проекте, - страдать тебе придется

PS. Скажи что они все делают неправильно, что надо все переписать с нуля, перепиши 15%, убей окончательно проект и увольнялся :)
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037747
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не нормально, хотя бы потому, что непонятно с одного взгляда, как будет работать
* то ли это аналог рид онли коллекции
* то ли предподготовленный запрос
* то ли внутри GetDocsByID есть ToList/ToArray (тогда вообще жопа)

а вторая причина - куча сайд эффектов и непоняток:
* что если для каждого экземпляра корневого объекта из 1000 будет вызван Docs
* что если внутри GetDocsByID миллион записей
* что если DBManager или MGDocs null

IPmen
У нас тоже так на некоторых проектах. Я предложил такие проперти сразу заполнять когда и объект заполняется сам но не всегда пропертя эта может использоваться и нет смысла тянуть заранее данные. А как все же верно?

* сначала отдельно идешь в базу, достаешь все что надо
* а потом из этого строишь и заполняешь объект
* а вот потом можешь обращаться к нему и к его пропертям
все это три разных места

обозначенным способом можно делать вычисляемые свойства, но которые используют уже заполненные значения из других свойств этого же объекта, ну например FullName, который компонуется из FirstName и LastName
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037769
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lans
Всем доброго дня. Давно не работал разработчиком точнее года так 4. Подвернулся не большой проект WIn Forms + C# + ADO.NET и увидел я такую интересную штуку что Ienumerable<> пропертю заполняют прям из самой проперти. Это нормально по всем канонам современной разработки? Извиняюсь заранее если вопрос тупой

Что тут современного-то? Простая реализация шаблона ActiveRecord.
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037770
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или возьмём какой-нибудь NHibernate c lazy property в маппинге в виде коллекции...

Развели тут консилиум
...
Рейтинг: 0 / 0
Давно не кодил и такое увидел
    #40037902
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что, если я получаю значение поля, но последовательность перебирать не буду, а потом получу "кэшированную версию" перечисления и начну её итерировать. когда произойдет материализация объектов? можно легко выстрелить себе в ногу, как мне кажется.
в целом вызов методов в свойстве нормальное явление, если это свойство отражает внутренние состояние объекта, вычисляет что то небольшое или выдает значение. От внешних ссылок или каких то сервисов это не должно зависеть.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Давно не кодил и такое увидел
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (10): Анонимы (7), Yandex Bot 1 мин., Bing Bot 1 мин., Google Bot 7 мин.
x
x
Закрыть


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