@oop_ru

Страница 664 из 785
Sergey
03.06.2018
17:08:16
в datamapper сущность не обязана соответствовать строке там чуть другое)
table gateway тебе может даже не возвращать ряды из таблицы, там тоже ничего не должно соответствовать напрямую

но есть еще repository
repository это совокупность data mapper и unit of work

да это я понимаю
подчеркну. Различие в том, кто может работать с данными. Сам гейтвей или только объектная модель, а мэппер не причем

Evgeniy
03.06.2018
17:09:56
в обоих случаях table gateway и data mapper, с данными может работать только gateway в первом случае или mapper во втором

Google
Sergey
03.06.2018
17:21:31
в обоих случаях table gateway и data mapper, с данными может работать только gateway в первом случае или mapper во втором
mapper не меняет данные, он работает только с репрезентацией. А table gateway может сделать update запрос)

Evgeniy
03.06.2018
17:31:26
смотря что считать данными, я считаю данные то что в БД

маппер меняет данные в бд если изменилась сущность

Roman
03.06.2018
18:45:29
спасибо

Sheldhur
04.06.2018
06:28:58
суп

как щас push уведомления делать кошерно? появился какой-то единый протокол и точка распространения или до сих пор в каждом браузере своя реализация и сервер?

Ярослав
04.06.2018
09:18:15
Привет, ребят Я новичок в программировании , не проведёте review кода с точки зрения архитектуры ?

https://jsfiddle.net/na8n1k6o/

Там небольшой класс

Реализация ActiveRecord в js

Sergey
04.06.2018
09:58:49
архитектура... ммм.... я вижу просто код

Ярослав
04.06.2018
09:59:21
архитектура... ммм.... я вижу просто код
тогда с точки зрения просто кода)

Sergey
04.06.2018
09:59:38
и типичные проблемы решений с нарушением SRP (это не смертельно, и более того не всегда стоит заморачиваться на эту тему если ты круды делаешь), и высокая связанно (что за getStorage статический у типа представляющего сущности....)

Google
Ярослав
04.06.2018
10:00:22
сущность - entity, она прокидывается в конструкторе

Adel
04.06.2018
10:00:30
Чтобы выбрать одну энтити - запрашиваются данные со всей таблицы, загружаются, мапятся и потом фильтруется один

Sergey
04.06.2018
10:01:05
сущность - entity, она прокидывается в конструкторе
ой вникать надо. Но для начала погугли про row data gateway если у тебя модель данных прокидывается в конструктор там куда-то

Ярослав
04.06.2018
10:01:25
спасибо, сейчас погуглю)

Сергей, я посмотрел У меня нет бизнес-логики в activerecord Это просто класс для удобной работы с данными Бизнес логика лежит в сервисах (anemic domain model) А также часть ее в entity :) Я думал насчет агрегатов, но слишком уж большой overhead, так как у меня той логики кот наплакал

в activerecord instance просто инжектится entity и storage этот компонент позволяет получать данные и редактировать их

Артур Евгеньевич
04.06.2018
10:08:16
Бизнес логика лежит в сервисах (anemic domain model) бросай ты это дело пока не поздно

Ярослав
04.06.2018
10:09:32
почему?)

понятно, что active record и anemic domain model - антипаттерны при определенных условиях, но если не нарушать SOLID и SRP в частности, то будет все ок

Разве нет?

Sergey
04.06.2018
10:12:54
почему?)
потому что потом отучиваться заибешься

Adel
04.06.2018
10:13:13
Нет. Srp уже нарушен. Тесты нормально не напишкшь. Но если у тебя логики код наплакал, то пофиг

Ярослав
04.06.2018
10:13:32
Sergey
04.06.2018
10:13:35
ну и да. причин для изменений твоей модели данных стало больше

ага, это для browser LocalStorage алгоритм написан Хз как иначе можно )
для подобной фигни браузеры умеют в IndexedDB

Adel
04.06.2018
10:14:29
ага, это для browser LocalStorage алгоритм написан Хз как иначе можно )
Мапить то не надо. Там наверняка можно выбрать сначала один

Sergey
04.06.2018
10:15:03
Разве нет?
принципы ради принципов никому не нужны. Что нужно - понять что эти принципы тебе дают. В частности я очень рекомендую тебе подумать чем плоха высокая связанность

почему анемичная модель это антипаттерн - потому что она поощряет высокую связанность и скрывает проблемы декомпозиции (то есть проблемы ты испытывать будешь но менее явно почему)

Google
Sergey
04.06.2018
10:16:33
не ну можно конечно пойти по пути имутабельного стэйта и дробить больше

но я честно не очень понимаю для чего это в localStorage (оно же key-value хранилище уже)

Ярослав
04.06.2018
10:17:56
для подобной фигни браузеры умеют в IndexedDB
вот это круто) погляжу на него

Sergey
04.06.2018
10:20:09
короч, вместо принципов и паттернов я тебе рекомендую больше внимания уделить терминам coupling, information hiding и cohesion. Без понимания этих концепций понять все остальное намного сложнее (и проще перекинуться в оверинжееринг)

Sergey
04.06.2018
10:24:11
с конкретным ключем

Ярослав
04.06.2018
10:26:24
я иерархию храню пример: user: { name: 'olalala', settings: { someDelay: 666 } }, tasks: [ {name: 'tb_5', details: {}}, //... ]

хз, может я наркоман в key value такое хранить

Sergey
04.06.2018
10:27:04
я хз зачем тебе отдельные записи доставать

короч, не зная контекст ничего конкретного не скажу

Sergey
04.06.2018
10:27:21
но похоже на оверниженеринг и придумывание велосипедов

Ярослав
04.06.2018
10:31:23
есть расширения для браузера и есть данные в localStorage схему я тебе скинул выше задача была у меня - удобно работать с этими данными вместо того, чтобы писать chrome.storage.local.get() и chrome.storage.local.set() я пишу let task = TasksModel.findOne(someId); task.name = 'changed_name'; task.save();

в activerecord модели ничего, кроме работы с данными нет storage прокидывай какой хочешь, entity тоже видимо, не дорос я еще до вашего уровня, чтобы понять о связанности и связности кода) пойду курить книжки)

Bohdan
04.06.2018
10:34:39
@prophp7

Ярослав
04.06.2018
10:35:36
но похоже на оверниженеринг и придумывание велосипедов
я так и не нашел на просторах необьятного гитхаба нормальную реализацию работы с данными для расширений, а городить orm и агрегаты будет overhead'ом для проекта (хотя на счет orm можно будет подумать, если на indexeddb переезжать)

Ярослав
04.06.2018
10:36:47
для бизнес логики)

я думаю ты не знаешь зачем нужны агрегаты)
да?) а то я с тобой уже ни в чем не уверен)

Google
Sergey
04.06.2018
10:40:35
правильно, елси ты в чем-то сильно уверен, значит хуевы твои дела

Ярослав
04.06.2018
10:42:22
правильно, елси ты в чем-то сильно уверен, значит хуевы твои дела
Ты имеешь ввиду, что лучше все ставить под сомнение ?

Ярослав
04.06.2018
10:42:55
Затроллить меня хочешь ?)

Uiiuviiw
04.06.2018
10:49:45
Затроллить меня хочешь ?)
Вы это юзер. У Вас есть имя, но нет конфигурации, хотя конфигурация к Вам может быть описана в отдельном документе, которого у Вас, как у человека, быть не может. У Вас есть печень, почки, но нед документации. Поэтому правильно было бы создать ящик с названием юзер иположить в него конфигурацию и личные данные о юзере, в которых бы уже и было поле имя. Это если я правильно понял.

Ярослав
04.06.2018
10:51:53
Вы это юзер. У Вас есть имя, но нет конфигурации, хотя конфигурация к Вам может быть описана в отдельном документе, которого у Вас, как у человека, быть не может. У Вас есть печень, почки, но нед документации. Поэтому правильно было бы создать ящик с названием юзер иположить в него конфигурацию и личные данные о юзере, в которых бы уже и было поле имя. Это если я правильно понял.
тут нужно от требований бизнеса исходить у меня дело в том, что user - user, а настройки для него - настройки) будут еще настройки для всего приложения потому и такое разделение в settings лежат всякие delay для работы content скриптов, чтобы линкедин не забанил по сигнатурам)

Admin
ERROR: S client not available

Uiiuviiw
04.06.2018
10:53:25
что у Вас написано, то я и прокоментировал. user: { name: 'olalala', settings: { someDelay: 666 } },

здесь нет user:{user, settings}

Ярослав
04.06.2018
10:56:03
верно, но потом будет {user, appSettings} но user.setting и appSettings - разные вещи, поэтому спасибо за уточнение)

Uiiuviiw
04.06.2018
10:56:15
если бы было user:{id, user, settings} то вопросов бы подобныхнаверное и не возникло. Хотя, хочу заметить, это не меня смутило полеname, я всего лишь влез в разговор.

Ярослав
04.06.2018
10:59:04
это просто схема для понимания, хоть и очень схожая с реальной, но все же - синтетический пример)

Enterpise
05.06.2018
11:10:14
привет. У меня антипаттерн: имеется некий store который стабится

вручную

в стабе переобределены геттеры

сеттеры кидают исключение

это плохо ?

Sergey
05.06.2018
11:11:32
да

Google
Sergey
05.06.2018
11:11:49
https://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

ну и заодно погугли сам связь между геттерами, сеттерами и coupling

и подумай как эта связь проявляется в том что тебе неудобно стабить

Enterpise
05.06.2018
11:21:40
не, вы не так поняли. У меня в одном и том же интерфейсе определены методы GETХХХ и PUTХХХ

для "тестирования" нужно только переопределния GETXXX

здесь ISP violation

Sergey
05.06.2018
11:26:59
или SRP violation

важный момент который ты не рассказал это для чего вызывается GETXXX

то есть как используется полученное значение

Enterpise
05.06.2018
11:45:41
у меня проблема: одни данные частично застабенны

другие нет

как мне заделить

то, что нужно 2 интерфейса - это ОК?

Sergey
05.06.2018
11:49:58
то, что нужно 2 интерфейса - это ОК?
не знаю, тыж на мои вопросы не хочешь отвечать

Sheldhur
06.06.2018
01:59:11
Вопрос по push уведомлениям. Вот у пользователя несколько девайсов, плюс к этому у него может быть несколько браузеров, в каждом из которых он может подисаться на пуши и каждый при этом может быть запущен. Как определить куда именно слать уведомление, чтобы не спамить на каждый девайс?

Andrei
06.06.2018
02:40:57
Зависит от архитектуры компонента, который управляет нотификашками. Можно после 1й удачной отправки помечать уведомление, что доставлено как пуш и это будет означать что больше попыток отправить на другие девайсы не будет, например.

Adel
06.06.2018
12:46:14
Мне от телеги приходит и туда и сюда...

Roman
06.06.2018
13:13:22
Мне от телеги приходит и туда и сюда...
Но если ты прочтёшь на каком-то девайсе, то оно пропадёт на других

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