Size: a a a

Unity Floodилка

2020 August 31

DV

Danila Vanilla in Unity Floodилка
Shura Proger
Какая ненависть к нему, а за шо? -.-
Сильная связанность
источник

SP

Shura Proger in Unity Floodилка
Danila Vanilla
Сильная связанность
Знать бы ещё, почему это проблема. Но хорошо, буду его избегать
источник

G

Graf in Unity Floodилка
Shura Proger
Знать бы ещё, почему это проблема. Но хорошо, буду его избегать
а вот узнай
источник

SP

Shura Proger in Unity Floodилка
Graf
а вот узнай
справедливо
источник

G

Graf in Unity Floodилка
Shura Proger
справедливо
и поделись с нами
источник

SP

Shura Proger in Unity Floodилка
Graf
и поделись с нами
1. Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.

2. Глобальное состояние. Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема. Когда мы получаем доступ к экземпляру класса, мы не знаем текущее состояние этого класса, и кто и когда его менял, и это состояние может быть вовсе не таким, как ожидается. Иными словами, корректность работы с синглтоном зависит от порядка обращений к нему, что вызывает неявную зависимость подсистем друг от друга и, как следствие, серьезно усложняет разработку.

3. Зависимость обычного класса от синглтона не видна в публичном контракте класса. Так как обычно экземпляр синглтона не передается в параметрах метода, а получается напрямую, через GetInstance(), то для выявления зависимости класса от синглтона надо залезть в тело каждого метода — просто просмотреть публичный контракт объекта недостаточно.

4. Наличие синглтона понижает тестируемость приложения в целом и классов, которые используют синглтон, в частности. Во-первых, вместо синглтона нельзя подпихнуть Mock-объект, а во-вторых, если синглтон имеет интерфейс для изменения своего состояния, то тесты начинают зависеть друг от друга. Говоря же проще — синглтон повышает связность, и все вышеперечисленное, в том или ином виде, есть следствие повышения связности.

Естественно, можно акккуратненько пройти по граблям и использовать синглетон, но (цитата из доки к пикоконтейнеру) "Overuse makes for bad solutions. At the enterprise level, it makes for very very bad solutions"...

Тем более, что при тщательном рассмотрении вопроса, использования синглтона, как правило, можно легко избежать. А если можно легко избежать, значит это нужно сделать, чтобы удержать себя от излишнего соблазна "оверюза"... Например, для контроля количества экземпляров объекта вполне можно (и нужно) использовать различного рода фабрики.

Наибольшая же опасность, как было сказано, подстерегает при попытке построить на основе сиглтонов всю архитектуру приложения, такому подходу существует масса замечательных альтернатив. Например, IoC контейнеры — там проблема контроля создания сервисов решается естественным образом, так как они, по сути, являются "фабриками на стероидах" =). Другой альтернативой являются Service Locator-ы, из известных вариантов этого подхода — паттерн IServiceProvider.
источник

SP

Shura Proger in Unity Floodилка
Мне это нихуя не даёт, но я обдумаю
источник

G

Graf in Unity Floodилка
мощно
источник

DD

Den Dev in Unity Floodилка
Все паттерны важны и нужны
источник

DD

Den Dev in Unity Floodилка
Если грамотно юзать
источник

I

Indra in Unity Floodилка
ну так же вроде то что делается синглтоном, реализуется корректно через скриптаблэ обжектъ
источник

SP

Shura Proger in Unity Floodилка
Разве к SO можно обратиться не передавая его в инспекторе?
источник

d

dm in Unity Floodилка
загрузить из ресурсов/бандля. все как с обычным ассетом
источник

𝚒

𝚒𝚗𝚒𝚝 𝟻... in Unity Floodилка
Den Dev
Все паттерны важны и нужны
источник

SP

Shura Proger in Unity Floodилка
dm
загрузить из ресурсов/бандля. все как с обычным ассетом
Первый способ знаю, а второй надо загуглить
источник

SP

Shura Proger in Unity Floodилка
источник

SP

Shura Proger in Unity Floodилка
Shura Proger
Кароче, я передаю вектор, который без normalized не работал. В старой версии кода этот вектор был локальной позицией точки начала нового чанка
Стоп. Мне этот метод для каждого вида препятствий вызывать? 3 раза?🤔 Сеёзна?
источник

DV

Danila Vanilla in Unity Floodилка
Shura Proger
Стоп. Мне этот метод для каждого вида препятствий вызывать? 3 раза?🤔 Сеёзна?
А ты как хотел?
источник

SP

Shura Proger in Unity Floodилка
Danila Vanilla
А ты как хотел?
Я думал оно как-то иначе. Хотя, в принципе, у меня скрипт спавнера всего с двумя строчками, норм
источник

DV

Danila Vanilla in Unity Floodилка
Shura Proger
Я думал оно как-то иначе. Хотя, в принципе, у меня скрипт спавнера всего с двумя строчками, норм
а покажи как ты пул реализовал
источник