@oop_ru

Страница 572 из 785
pew
23.03.2018
10:23:35
или стейт буду передавать в качестве аргумента

ой все

Sergey
23.03.2018
10:23:42
если ты про query методы которые чето там считают и возвращают - это не "доступ к стэйту"

Google
pew
23.03.2018
10:24:19
не важно про что я, бахнул свойств пачку, передал ссылку на объект, зачекал свойства

получил водокачку

Roman
23.03.2018
10:24:25
Просто если всё на полях приватных делать (вообще без геттеров-сеттеров) - то тут вопрос рефакторинга остро встаёт. Потому что для десериалищации объекта из базы - надо строками указывать имена полей. То есть переименовал поле - будь добр не забыть и конфиг сущности в ORM’ке поправить.

Sergey
23.03.2018
10:24:31
но в целом есть много вариантов. С тем же временем мне понравилась идея воспринимать время как стрим тэймстэмпов

получил водокачку
или какую-то херню) ты ж понимаешь прекрасно о чем я говорю)

Roman
23.03.2018
10:24:57
И со своей микро-орм

Sergey
23.03.2018
10:25:17
Не, кверики вообще со своими моделями
не путай теплое и мягкое (CQS и CQRS)

Sergey
23.03.2018
10:25:25
разные масштабы

pew
23.03.2018
10:25:44
или какую-то херню) ты ж понимаешь прекрасно о чем я говорю)
не понимаю. У тебя какой-то объект который ты аргументом куда-то передаешь, у него много полезной инфы, вся она на геттерах, в чем проблема? все норм

Roman
23.03.2018
10:25:46
Гетеры сетеры никак не решают проблему же?
Публичный геттер и приватный сеттер решают

Потому что я могу через лямбду (это экспрешоны у нас) указать на нужное свойство и что с ним делать (если есть публичный геттер).

Google
Sergey
23.03.2018
10:26:49
не понимаю. У тебя какой-то объект который ты аргументом куда-то передаешь, у него много полезной инфы, вся она на геттерах, в чем проблема? все норм
есть кейсы когда все нормально, но это далеко не все кейсы. Шаринг стэйта (а это именно это и есть) - самый главный источник проблем с декомпозицией.

Roman
23.03.2018
10:26:49
И все фишки, типа переименования свойства начинают работать.

Попутно меняя и лямбду в конфиге ОРМ, если ты сущность рефакторишь

Sergey
23.03.2018
10:27:42
pew
23.03.2018
10:27:50
есть кейсы когда все нормально, но это далеко не все кейсы. Шаринг стэйта (а это именно это и есть) - самый главный источник проблем с декомпозицией.
ну короче у тебя шмотка в рюкзаке, у неё всякие параметры есть, какой аргумент себе возьмешь, какой другу отдашь?

Sergey
23.03.2018
10:28:08
а хотя.... объяснение стэйта как "просто все подряд запихнутое в рюкзак" очень точно отражает то как люди делают декомпозицию

Aleh
23.03.2018
10:29:07
Публичный геттер и приватный сеттер решают
как? Хранить орм-специфичные методы, которые никому на самом деле не нужны?

Sergey
23.03.2018
10:29:23
у тя шмотка
тогда я не понял вопроса

Aleh
23.03.2018
10:29:33
и со старыми именами, которые уже неактуальны

Roman
23.03.2018
10:29:42
геттеры то зачем?)
config.Property(x=> x.Name).Required().HasMaxLength(200); Вот Name - это свойство с публичным геттером. А если его нет, а есть только поле, то config.Property(”_name”).Required().HasMaxLength(200);

pew
23.03.2018
10:30:17
тогда я не понял вопроса
ну у шмотки свойства, ты её передаешь куда надо, обращаешься к чему хочешь, ты же не фреймворк пишешь! Что такого что о шмотке весь проект будет знать и какие у неё свойства, если это неотъемлемая часть проекта

Roman
23.03.2018
10:30:17
нифига не понимаю...
Во втором случае - у тебя в конфиге - строка

pew
23.03.2018
10:30:24
зачем задрачиваться ради задрачивания

а потом бить в грудь себя и кричать я ЖЕЖ ООП

Google
Sergey
23.03.2018
10:30:57
зачем задрачиваться ради задрачивания
не ради задрачивания, если ты не понимаешь преимуществ (и не пытаешься разобраться) - то это твои проблемы))))

Sergey
23.03.2018
10:31:25
я ж к этому всему пришел не потому что "скучно было" а потому что хлебнул проблем с изменениями требований

Aleh
23.03.2018
10:32:08
сорри я про игру, вещь из инвентаря
ну вот пасхальный спешиал какой. Яйца там или кролики

Roman
23.03.2018
10:33:46
нифига не понимаю...
В первом случае, я иду в класс User, становлюсь на имя свойства с геттером, жму Ctrl+R+R, пишу UserName, и мой конфиг из config.Property(x=> x.Name).Required().HasMaxLength(200); превращается в config.Property(x=> x.UserName).Required().HasMaxLength(200); , а во втором он каким был - таким и остался, и мне надо ручками идти и править его.

Дмитрий
23.03.2018
10:34:37
но в целом есть много вариантов. С тем же временем мне понравилась идея воспринимать время как стрим тэймстэмпов
Время — это индексированная последовательность событий, это включает в себя события с таймстампами как разновидность

Roman
23.03.2018
10:34:37
А когда там в свойствах ссылки на другие сущности - VO - то вообще трэш угар и веселуха начинается

Дмитрий
23.03.2018
10:35:11
Ну я бы не сказал что это очевидно

pew
23.03.2018
10:35:16
ясно, свойства не нужны, методы тоже

Roman
23.03.2018
10:35:19
не вижу профита
Профит в том, что у тебя не возникнет ситуации, когда в модели у тебя одно, а в конфиге ORM другое.

pew
23.03.2018
10:35:25
Roman
23.03.2018
10:35:43
ide-проблемы
То есть она должна имя приватного поля сама туда запихнуть по-твоему?

Aleh
23.03.2018
10:35:50
продолжай, интересно же
так че продолжать, надо добавить новый тип шмотки, а у вас старые шмотки размазаны по проекту

и надо везде добавлять проверочки

Google
Sergey
23.03.2018
10:35:55
Профит в том, что у тебя не возникнет ситуации, когда в модели у тебя одно, а в конфиге ORM другое.
потому лучше запихнуть код занимающийся конфигурацией ORM в сущность?

Roman
23.03.2018
10:35:58
то есть ты валидируешь сущность извне?
Нет, это конфиг ORM, то, как твоя сущность ляжет на базу.

Roman
23.03.2018
10:37:07
потому лучше запихнуть код занимающийся конфигурацией ORM в сущность?
Нет, этот код живёт отдельно, в отдельном проекте, который референсит проект с доменом. Но без публичных геттеров - конфигурация превращается в пытку, а её рефакторинг - в смертную казнь.

pew
23.03.2018
10:37:27
так че продолжать, надо добавить новый тип шмотки, а у вас старые шмотки размазаны по проекту
напиши кейс в котором надо новый тип шмотки если кролики чето там? а то я не догнал суть проблемы

pew
23.03.2018
10:38:25
я не догдал суть того что ты вещаешь и причем тут геттеры
ну просто к челу там докалупались, я написал про геттеры

Sergey
23.03.2018
10:38:26
если мы говорим про инвентар в играх - ты когда "достаешь" предметы то меняется стэйт

Roman
23.03.2018
10:38:36
хз, сойдемся на том что это "компромис" и успокоимся))
Ну то бишь если я через геттер не изменяю состояния, а сеттер у меня закрыт (изменения можно вносить только изнутри сущности) - то в целом такой подход - норм?

pew
23.03.2018
10:38:49
чето пошло потом в ключе типа да геттеры фигня, надо по другому че-то кудато не пойми что куда передавать

а знать о геттерах типа сакс

Sergey
23.03.2018
10:40:34
Ну то бишь если я через геттер не изменяю состояния, а сеттер у меня закрыт (изменения можно вносить только изнутри сущности) - то в целом такой подход - норм?
давай разберемся с логической цепочкой.... ты сделал приватными сеттерами потому что публичные сеттеры тебе не нужны. Да и в целом сеттеры тебе нужны только для ORM. Геттеры так же только для ORM. Появилось это решение как следствие какой-то другой проблемы (то что у тебя там что-то в отдельном проекте и по другому тяжело и больно). Скорее всего у этой проблемы найдется и другое решение которое не подразумевает наличия ни геттеров ни сеттеров, но в целом я допускаю что "на данный момент сойдет если использование этих геттеров и сеттеров строго ограничено конкретно этой задачей и никто и никогда не будет юзать эти геттеры для других целей"

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

Sergey
23.03.2018
10:42:39
эм? всмысле подразумевается изменение стейта?
ты когда достаешь что-то из рюкзака - ты меняешь стэйт рюкзака.

Roman
23.03.2018
10:42:45
давай разберемся с логической цепочкой.... ты сделал приватными сеттерами потому что публичные сеттеры тебе не нужны. Да и в целом сеттеры тебе нужны только для ORM. Геттеры так же только для ORM. Появилось это решение как следствие какой-то другой проблемы (то что у тебя там что-то в отдельном проекте и по другому тяжело и больно). Скорее всего у этой проблемы найдется и другое решение которое не подразумевает наличия ни геттеров ни сеттеров, но в целом я допускаю что "на данный момент сойдет если использование этих геттеров и сеттеров строго ограничено конкретно этой задачей и никто и никогда не будет юзать эти геттеры для других целей"
На самом деле можно сделать немного изощрённо и доменной сборке указать, чтобы она разрешила другой сборке (где DAL живёт) видеть то, что помечено модификатором доступа internal, и получится, что DAL эти геттеры будет видеть, а все остальные - нет.

pew
23.03.2018
10:42:59
ты когда достаешь что-то из рюкзака - ты меняешь стэйт рюкзака.
не достаю, в просто обращаюсь к вещи в рюкзаке к примеру

Google
Sergey
23.03.2018
10:43:12
Roman
23.03.2018
10:43:23
internal - это видимость в пределах сборки

Среднее между public и private

pew
23.03.2018
10:43:59
и зачем ты к ней обращаешься?
ну вес посчитать к примеру, или для квеста првоерить подходят ли вещи, или к вещи в руке могу обратиться посчитать формулы

Sergey
23.03.2018
10:44:08
На самом деле можно сделать немного изощрённо и доменной сборке указать, чтобы она разрешила другой сборке (где DAL живёт) видеть то, что помечено модификатором доступа internal, и получится, что DAL эти геттеры будет видеть, а все остальные - нет.
повторюсь - это вопрос поиска компромисов в сражении с инфраструктурой. Если по другому не выходит и все сайд эффекты регламентированы и их влияние незначительно - нормальный рабочий вариант

pew
23.03.2018
10:44:12
и еще много как

Sergey
23.03.2018
10:44:31
ну вес посчитать к примеру, или для квеста првоерить подходят ли вещи, или к вещи в руке могу обратиться посчитать формулы
вес тебе посчитает рюкзак, он знает что у него внутри и он должен этим заниматься. Доступ к стэйту не нужен.

pew
23.03.2018
10:44:59
или проверить подойдет вещь что бы одеть или нет

или для бартера выставить шмотку, или нпц продать

Sergey
23.03.2018
10:45:38
ну а в формулку с руки у вещи посчитать или с ноги
мне сложно так как для меня игры это незнакомая предметная область)

pew
23.03.2018
10:45:40
или для крафта

ну так

Sergey
23.03.2018
10:45:52
pew
23.03.2018
10:46:53
я не делал но покури, не знаю курил ты, сколько там делал т что делаешь, ну короче вот тебе мой совет, ниблагадари

))))

Aleh
23.03.2018
10:47:07
ну а в формулку с руки у вещи посчитать или с ноги
лучше всего спросить у вещи, может ли она в данные параметры втиснуться

pew
23.03.2018
10:47:31
лучше всего спросить у вещи, может ли она в данные параметры втиснуться
вещи тогда параметры передай, напиши под каждый такой кейс в ней метод

Aleh
23.03.2018
10:47:35
https://martinfowler.com/bliki/TellDontAsk.html

pew
23.03.2018
10:47:40
а потом все равно в компонентах обращайся к этой вещи

ну спс

Страница 572 из 785