@oop_ru

Страница 228 из 785
Aleserche
23.05.2017
16:53:26
естественно там тестов нет. Просто ручками все сверяют по отчетам, а там уж как повезет

Evgeniy
23.05.2017
16:54:09
мы так релизим

перекрестился и деплоишь по фтп )))))

Google
Aleserche
23.05.2017
16:54:51
а если упадет? Что тогда?

Evgeniy
23.05.2017
16:57:04
на все воля аллаха

Sergei
23.05.2017
17:11:14
У нас на проекте была такая кнопка - сами делали.

Aleserche
23.05.2017
17:11:50
для чего?

Sergei
23.05.2017
17:12:57
Собирали проект. Это было 15+ лет назад, когда всякие модные CI ещё были на так чтобы mainstream.

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

Aleserche
24.05.2017
14:51:24
https://refactoring.guru/ru/design-patterns/flyweight вот понять не могу. Как рощу отрисовывать будет, если некоторые объекти фактически одни и те же. Дерево не сможет находиться в разных координатах. В чем прикол?

Sergei
24.05.2017
15:00:53
Паттера lightweight.

Sergei
24.05.2017
15:01:51
Идея как раз в том, что различающаяся информация хранится в объекте, а одинаковая - в одном каком-то месте, и много объектов на неё ссылаются.

https://refactoring.guru/ru/design-patterns/flyweight вот понять не могу. Как рощу отрисовывать будет, если некоторые объекти фактически одни и те же. Дерево не сможет находиться в разных координатах. В чем прикол?
Например, рисуем дерево - нужна позиция, форма, текстура. По-тру-ООП мы эти данные должны бы инкапсулировать в один объект. Для рощи нужно 1000 деревьев - согласно тру-ООП у нас в памяти 1000 объектов, и 1000 одинаковых (!) текстур дерева в каждом. Суть lightweight - вынести одинаковые части объектов в один-единственный внешний объект. Мы в нашем примере могли бы хранить так одну на всех текстуру.

Sergei
24.05.2017
15:05:17
кеширование - вид сбоку
С этим мне сложно согласиться.

Google
Sergei
24.05.2017
15:06:31
С этим мне сложно согласиться.
Вот в java например Integer кешируются до 128 (если не ошибаюсь) по дефолту и везде в рантайме, где бы ты не использовал допустим целое число 8, то везде это будет ссылка на один и тот же обьект.

Sergei
24.05.2017
15:06:49
Кэширование по сути сохранение информации дольше, чем необходимо, с целью повышения скорости доступа к ней. Lightweight идейно про другое.

В одном случае - усккорение доступа, в другом - экономия памяти.

К словм сказать, кэширование как раз НЕ экономит память обычно - скорее наоборот.

Sergei
24.05.2017
15:08:20
Sergei
24.05.2017
15:08:34
Sergei
24.05.2017
15:09:55
Суть - есть много одинаковых сущностей, вместо использования 100 этих сущности мы будет использовать один экземпляр сущности, а везде где нужно будем на неё ссылаться.

Sergey
24.05.2017
15:11:03
да что ты не как джавист, памяти мало что-ли?

Sergei
24.05.2017
15:11:55
Это про lightweight. А пример про Integer - кэширование (заранее создать объекты, хранить их, не удаляя, чтобы когда попросят - быстро выдать их, без задержек на выделение памяти).

Хотя по реализации похоже, да.

Повторюсь, цели разные, а реализация похожая.

Sergei
24.05.2017
15:13:30
Это про lightweight. А пример про Integer - кэширование (заранее создать объекты, хранить их, не удаляя, чтобы когда попросят - быстро выдать их, без задержек на выделение памяти).
В общем всё нужно для экономии памяти или для ускорения доступа, ну или еще более общее - устранение дублирования.

да что ты не как джавист, памяти мало что-ли?
Памяти всегда мало) А если это преждевременная оптимизация то уже плохо.

Sergei
24.05.2017
15:14:30
С кэшем это не всегда устраненте дублирования - может быть несколько же кешей, где как раз дублирующиеся данные.

да что ты не как джавист, памяти мало что-ли?
Хотел было возразить "я не джавист, я плюсовик". Но внезапно вспомнил, что теперь-то я и правда джавист.

Sergei
24.05.2017
15:22:38
"Как рощу отрисовывать будет, если некоторые объекти фактически одни и те же. Дерево не сможет находиться в разных координатах. В чем прикол?" Выше писали вот это, я думаю что проблема как раз в том что дерево ещё и знает где оно находиться, сейчас нашел пример в книге Гранд "Шаблоны проэктирования на java" там пример с приложением текстовым редактором, где каждая буква это обьект, чтобы не создавать каждый раз к примеру новую букву А, создается только один экземпляр, а потом уже отдается ссылка на этот экземпляр (а это же чем то еще напоминает синглтон....) То же самое что и мой пример с Integer

Нет, всё таки там пример не совсем удачный, дерево не должно знать о своём расположении в лесу.

Aleserche
24.05.2017
15:53:19
меня немного другое смущает. Допустим у нас 3 породы деревьев. Нужно нарисовать 30 деревьев, отличаются только по высоте. Каждой породы по 10 штук. Как я одним объектом в один момент времени отображу 10 деревьев одной породы в один момент времени?

Oleg
24.05.2017
16:01:02
Это коллекция объектов будет

Google
Oleg
24.05.2017
16:01:11
В которой есть метод отобразить

Sergei
24.05.2017
16:04:32
меня немного другое смущает. Допустим у нас 3 породы деревьев. Нужно нарисовать 30 деревьев, отличаются только по высоте. Каждой породы по 10 штук. Как я одним объектом в один момент времени отображу 10 деревьев одной породы в один момент времени?
Тут стоит отталкиваться от проблемы, которую решает паттерн. В случае lightweight - "проблема: много дублирующихся данных; решение: одинаковые данные пусть хранятся отдельно, и используются многими объектами." Соответствено если в твоём примеое проблемы с хранением одинаковых данных нет - то и паттерн Lightweight неприменим.

Aleserche
24.05.2017
16:05:10
видимо пример неудачный

Sergei
24.05.2017
16:05:14
меня немного другое смущает. Допустим у нас 3 породы деревьев. Нужно нарисовать 30 деревьев, отличаются только по высоте. Каждой породы по 10 штук. Как я одним объектом в один момент времени отображу 10 деревьев одной породы в один момент времени?
допустим у тебя будет какой то класс фабрика по созданию деревьев, у тебя будет метод, в котором ты будешь указывать породу и параметры, допустим ты создаешь "берёза, высота 10м" в фабрике создасться этот обьект, и добавиться в внутреннюю коллекцию деревьев, и тебе будет отдана ссылка на этот обьект, потом ты создашь "берёза 11м" всё повториться, но когда ты создаешь ещё один обьект "берёза 10м" то тебе будет отдана ссылка на экземпляр уже существующего обьекта.

Aleserche
24.05.2017
16:09:07
породы одинаковые, высота будет отличаться

а может и не отличаться, там уж как повезет

Sergei
24.05.2017
16:10:36
а может и не отличаться, там уж как повезет
Ну тут важно отталкиваться от конкретной проблемы. Если "признаков нет" - паттерн просто не применим.

а может и не отличаться, там уж как повезет
Если говорить с практической точки зрения - в играх первый кандидат на lightweight будет текстура, шейдер для дерева, так как обычно для всех деревьев стараются использовать одну и ту же текстуру "кора дерева", например.

Aleserche
24.05.2017
16:13:09
я похоже зря заострил внимание на позиционировании деревьев. Несколько одинаковых деревьев в одной точке не будет нарисовано, т.к. это не имеет смысла. В итоге выигрыш, расход памяти меньше

в общем я понял. Чем-то составной ключ напоминает

Sergei
24.05.2017
16:16:58
Да, по сути так и есть - вместо хранения всего в одной "записи" ты хранишь часть данных отдельно, "в другой таблице", и несколько "записей" на них могут туда ссылаться.

Sergei
24.05.2017
16:17:32
И логика в общем очень сильно похожая - избегаем дублирования.

Артур Евгеньевич
24.05.2017
18:48:16
у на стут было обсуждение что такое архитекктура. вот наткнулся на определение

Software architecture is the structure that defines the flow of information through a software system. It is a set of decisions made about how software is organized and operates in order to meet the goals of that software.

Architecture is simply a set of attributes about how your code is laid out, organized, and how it interacts with other pieces or layers of the code.

Sergey
24.05.2017
22:15:21
у на стут было обсуждение что такое архитекктура. вот наткнулся на определение
и все же определение "архитектура это набор ограничений налагаемых на систему для достижения определенных характеристик оной" мне нравится больше.

оно... менее двусмысленное

ну и в целом очень похоже на то что ты привел

И логика в общем очень сильно похожая - избегаем дублирования.
когда избегаем дублирования стоит учитывать откуда приходят изменений. То есть не стоит устранять дублирование, даже если код выглядит 1 в 1, если у этих штук разные потоки изменений. У меня пример был - новости. Есть новости пользователей (определенной группы) и есть новости администрации. И то и то - просто новости пользователей. И разработчик который это пилил просто сделал это одной штукой. А потом через пару недель пришли изменения - для пользователей нужна премодерация, а для администраторов нужен чуть-чуть другой флоу публикации.

Google
Sergey
24.05.2017
22:18:17
в итоге разработчик попытался решить все кастылями, через 2 дня попыток пришлось просто переписать модуль

Admin
ERROR: S client not available

da horsie
25.05.2017
01:48:04
http://blog.cleancoder.com/uncle-bob/2017/05/05/TestDefinitions.html

Классификация тестов (еще одна, теперь банановая)

Мурад
25.05.2017
18:15:49
У кого опыт с event sourcing. Как вы делаете версионирование событий? Вариант который предлагают многие: Создать новый класс ивента с меткой V2 в имени класса, а старый отметить как Deprecated. class AccountCreated => AccountCreated_V2 Но такое чувство, как будто костыль какой-то. Может есть более изящный способ, с преобразованием старых ивентов в новые, прозрачно для системы?

Aleh
26.05.2017
08:41:37
тут несколько вопросов: 1. в чем их разница 2. что делать со старыми

Sergey
26.05.2017
09:59:43
> class AccountCreated => AccountCreated_V2 а чем они отличаются?

я знаю про практику когда просто добавляются небольшие специализированные ивенты или же они просто дублируются. А если ты говоришь про то что уже хранится в базе - есть варианты как это хэндлить но все сильно к конкретному кейсу привязано

https://www.youtube.com/watch?v=PJjHfa5yxlU

Alisher
29.05.2017
02:56:08
Доброе утро, какую архитектуру сейчас круто использовать, при проектирование андроид приложений?

Mvc, mvp, mvvm

Aliaksandr
29.05.2017
03:08:03
Alisher
29.05.2017
03:08:35
А нумерация начинается с нуля или 1?))

Sergey
29.05.2017
06:55:10
Mvc, mvp, mvvm
чаще юзают mvp, можно попробовать силы с mvvm, ну а далее зависит от того что ты делаешь

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

Alisher
29.05.2017
07:07:42
Ну задача моя, есть у меня активити на котором 10 фрагментов будет

Если использовать, mvp то мне нужно для каждого фрагмента модельку и презентер делать?

Google
Alisher
29.05.2017
07:09:37
Есть ещё вроде mvp clean architecture

Где соблюдается солид

Правда ещё не разобрался

)

Sergey
29.05.2017
07:11:45
в целом смотря как ты будешь делать, есть варианты при которых "моделькой" будет тупо структура данных проброшенная из сервисного слоя

Есть ещё вроде mvp clean architecture
которую я тебе рекомендую использовать ТОЛЬКО если ты понимаешь почему она clean (по сути Дядя боб не для Андроида clean architecture пушил)

Где соблюдается солид
SOLID и в обычном MVP соблюдается если ты его не нарушаешь

http://unpetitaccident.com/pub/compeng/languages/JAVA/Principles_and_Patterns.pdf

почитай для начала

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