@oop_ru

Страница 326 из 785
F01134H
25.08.2017
14:50:07
внутри функция имеет только поведение

я бы даже сказал, что функция - проявление поведения

Sergei
25.08.2017
14:51:00
замыкания ссылаются на внешний стейт
его можно скрыть в другой функции.

Roman ?
25.08.2017
14:51:08
внутри функция имеет только поведение
в js же можно хранить что то внутри функции между вызовами?

Google
F01134H
25.08.2017
14:51:21
хотя у голанга например есть функции внутри функций, вот это уже интереснее)

Igor'
25.08.2017
14:51:56
звучит как костыль

F01134H
25.08.2017
14:52:00
его можно скрыть в другой функции.
не понимаю, причем тут это

звучит как костыль
в го нет костылей на уровне языка

Roman ?
25.08.2017
14:52:28
?

F01134H
25.08.2017
14:53:24
конкретно про функции внутри функций - это позволяет инкапсулировать кусок логики внутри функции

сейчас не вспомню, зачем это еще можно юзать

Igor'
25.08.2017
14:54:11
а зачем?) почему именно такой подход?

F01134H
25.08.2017
14:54:30
Igor'
25.08.2017
14:54:54
и не поспоришь

Sergei
25.08.2017
15:01:10
Ну вот например обычный пример, есть функция которая создаёт другую функцию, у каждого экземпляра функции есть стейт function counter() { let counter = 0; return function () { counter++; return counter; } } var c1 = counter(); var c2 = counter(); console.log(c1()); console.log(c1()); console.log(c2()); console.log(c2()); console.log(c2()); out is 1 2 1 2 3

Ну вот например обычный пример, есть функция которая создаёт другую функцию, у каждого экземпляра функции есть стейт function counter() { let counter = 0; return function () { counter++; return counter; } } var c1 = counter(); var c2 = counter(); console.log(c1()); console.log(c1()); console.log(c2()); console.log(c2()); console.log(c2()); out is 1 2 1 2 3
такой себе ооп язык в котором обьектам допустимо иметь только один метод, создали конструктором экземпляры класса counter каждый инстанс имеет стейт независимый от других инстансов

Google
F01134H
25.08.2017
15:07:54
ну типо по сути оно как константа лежит и во время рантайма не меняется

Блин, сложна

@fes0r помоги

Sergei
25.08.2017
15:10:23
что то я не уверен. Ведь это состояние можно только извне изменить?
А здесь инкапсуляция и должна быть, здесь это примерно то же самое что я написал бы в java class Counter { private int counter = 0; public int increase() { counter++; return counter; } }

F01134H
25.08.2017
15:12:23
но изменить значение коунтера ты при этом можешь

Sergei
25.08.2017
15:13:47
что то я не уверен. Ведь это состояние можно только извне изменить?
Обьекты не должны давать изменять своё состояние извне, только валидным способом через методы. В js единственный способ это вызов функции. Можно конечно сделать переменную counter внешней но зато её могут менять все кому вздумается, а это уже нарушение инкапсуляции.

F01134H
25.08.2017
15:13:58
кстати вопрос в тему, а является ли иммутабельная переменная - константой?

Sergei
25.08.2017
15:23:45
кстати вопрос в тему, а является ли иммутабельная переменная - константой?
Смотря какая переменная, если переменная какой то примитив то да, если переменная обеькт то это зависит от того может ли обьект менять своё состояние или нет, если может то это уже вроде и не константа, но в то же время сохраняется ссылка на тот же самый инстанс обекта.

Aleh
25.08.2017
15:29:47
да

Sergei
25.08.2017
15:30:55
да
А ну про модули я ещё не читал

Aleh
25.08.2017
15:32:03
ну и приватные переменные через # у классов https://github.com/littledan/proposal-private-methods

Sergei
25.08.2017
15:46:25
ну и приватные переменные через # у классов https://github.com/littledan/proposal-private-methods
Ну я привёл пример замыкания функции как функции с стейтом что практически то же самое что и обьект который может иметь свой стейт, единственное различие это то что функция(обьект) имеет только один метод. Ну и терминология разная ещё. function person(personName) { var name = personName; return function() { return name; } } var female = person("Ada"); var male = person("Mike"); console.log(female()); console.log(male());

Sergei
25.08.2017
15:50:36
Sergei
25.08.2017
15:54:36
пример ж рабочий)
как тогда правильно принять два возвращаемых значения? var a, b = person("Mike"); a(); b("Bob"); a(); не работает

Google
Aleh
25.08.2017
15:55:05
это ж простой объект, можно разыменованием const { showName, changeName } = person(“Bob”)

Sergei
25.08.2017
15:57:35
это ж простой объект, можно разыменованием const { showName, changeName } = person(“Bob”)
как то не то всё равно, я думал так как здесь, https://www.lua.org/pil/5.1.html

Aleh
25.08.2017
15:58:13


что именно не то?

Sergei
25.08.2017
15:59:47
да не всё верно, я затупил) возвращается же обьект {}
у меня ещё первая мысль была что если несколько значений возвращается то значит это будет или массив или еще что то в этом роде, но потом что то я вспомнил про lua, а так как js вроде бы брал некоторые концепции от этого языка я подумал что и здесь так.

Артур Евгеньевич
28.08.2017
07:24:41
Пацаны. Можно ли юзать валидацию в дто?

Sergey
28.08.2017
07:27:48
да

только не "в дто", а просто валидировать дто

Max
29.08.2017
12:55:08
Всем привет. Дано: 1) Есть доменная модель, которую вынесли в отдельную репу и по всем канонам DDD она не знает ничего о внешнем мире. 2) Есть проект в котором эта модель используется. 3) Есть некое правило (которое я до конца не постиг и могу понимать неверно) которое гласит, что каноническое DDD не должно тупо иметь перечень геттеров и сеттеров, или этот перечень надо минимизировать. Вопрос: В отсутствии (иил недостаточности) геттеров/сеттеров свойств (полей/атрибутов?) объекта доменной модели каким образом осуществлять доступ на чтение/изменение свойств этого объекта? В условиях также то, что лишь часть свойств инициализируются в конструкторе и лишь часть свойств являются VO. Спасибо за внимание!

Aleh
29.08.2017
13:00:28
через методы, которые несут смысловую нагрузку

например у юзера недолжно быть setPassword, а должны быть методы того, что реально может происходить с пользователем(resetPassword - фича, для забывших пароль, changePassword - для смены пароля из профиля)

Vladislav
29.08.2017
13:01:34
т.е. через геттеры и сеттеры)

Aleh
29.08.2017
13:03:57
зачем вы вынесли домен в отдельный репо вообще говоря вопрос, я бы такое не делал

Всем привет. Дано: 1) Есть доменная модель, которую вынесли в отдельную репу и по всем канонам DDD она не знает ничего о внешнем мире. 2) Есть проект в котором эта модель используется. 3) Есть некое правило (которое я до конца не постиг и могу понимать неверно) которое гласит, что каноническое DDD не должно тупо иметь перечень геттеров и сеттеров, или этот перечень надо минимизировать. Вопрос: В отсутствии (иил недостаточности) геттеров/сеттеров свойств (полей/атрибутов?) объекта доменной модели каким образом осуществлять доступ на чтение/изменение свойств этого объекта? В условиях также то, что лишь часть свойств инициализируются в конструкторе и лишь часть свойств являются VO. Спасибо за внимание!
какие у объекта есть свойства - дело объекта, всегда важен публичный интерфейс, а интерфейс домена должен отражать ваши фичи почти на английском языке

Max
29.08.2017
13:06:42
Разработка начиналась именно с предметной области, потому она отдельно. Остальные проекты это отдельные текущие и будущие сервисы, которые просто используют этот или другой домен

Aleh
29.08.2017
13:07:31
а что собой представляла разработка предметной области?

Max
29.08.2017
13:09:26
Перенос бизнес-процессов, участников и событий с последующим расширением по мере внедрения + тесты

Правильно ли я понимаю, что то некое правило про геттеры и сеттеры просто о том, что не надо всё так называть (и именовать), а стоит выделять смысловые методы и описывать их?

Aleh
29.08.2017
13:11:23
а что такое “геттеры” и “сеттеры”?

Google
Max
29.08.2017
13:11:55
getName(), setName()

sic transit
29.08.2017
13:11:58
sic transit
29.08.2017
13:12:29
Aleh
29.08.2017
13:12:36
sic transit
29.08.2017
13:13:13
Инкапсуляция типа
"типа" - разговорный элемент, не в смысле of type

Max
29.08.2017
13:13:36
То есть технически я делаю геттеры и сеттеры, но стоит реализовать их условно не как setName(), а как rename() ?

Aleh
29.08.2017
13:14:08
То есть технически я делаю геттеры и сеттеры, но стоит реализовать их условно не как setName(), а как rename() ?
например когда меняют пароль, то надо указать старый пароль, новый пароль дважды

метод должен выглядеть соответственно

changePassword(Password $old, Password $new

sic transit
29.08.2017
13:15:00
Что за язык то?

Aleh
29.08.2017
13:15:21
да любой с методами

sic transit
29.08.2017
13:15:34
Aleh
29.08.2017
13:15:47
вот здесь
то ли пых, то ли жава

sic transit
29.08.2017
13:16:01
то ли пых, то ли жава
Определенно не Java

А что php ныче строготипизированный?

Aleh
29.08.2017
13:16:46
тайпхинты давно есть, для ретурнов тоже, все остальное такое же говно как и раньше)

sic transit
29.08.2017
13:17:11
changePassword(Password $old, Password $new
прям такой синтаксис?

Aleh
29.08.2017
13:17:43
прям такой синтаксис?
например public function changePassword(Password $old, Password $new)

sic transit
29.08.2017
13:18:16
например public function changePassword(Password $old, Password $new)
а где тип возвращаемого значения?

Google
f4rt~
29.08.2017
13:18:27
void :D

Aleh
29.08.2017
13:18:28
public function changePassword(Password $old, Password $new): bool

Dmitriy
29.08.2017
13:18:49
после Ж

Андрэ
29.08.2017
13:18:50
а где тип возвращаемого значения?
штука же в том, что можно опускать его, чтобы было как обчно

sic transit
29.08.2017
13:18:53

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