Pull to refresh

Comments 8

Довольно обычная вещь, без изюминки. Таких пулов довольно много. Чем ваш реализация отличается от других пулов? Зачем вы решили делать свой велосипед?

Лично я из бесплатных пользовался двумя — ObjectPool и PoolBoss. Первый попроще, второй понавороченнее. Оба могут работать через методы расширений — вызываются прямо у GameObject или Transform. PoolBoss дополнительно имеет настройки в редакторе — довольно удобно.

Хм… Сейчас зашёл на страницу PoolBoss-а в AssetStore — он теперь не бесплатный… Вышла новая версия, Unity 5.0 ready
Туториал. Как то написал, использую до сих пор. Нужен был универсальный.
Это не туториал, это код с минимальными комментариями.
Два чая господину выше. Это не туториал. В туториалах люди чуть ли не каждую строчку объясняют, и не кусками кода, а помаленьку «пишут» вместе с читателями. А тут просто гигантские шматы кода с минимумом комментариев.
Поставил бы минус, если б мог.
На ключевых моментах сделаны пометки
иначе как бы это выглядело на примере одной функции. Специально писал код так, чтобы можно было просто его читать. Иначе вышло бы что-то вроде.
public virtual T Pop<T>(K groupKey) where T : V // достаем из пула
    {
        T result = default(T);// значение по умолчанию
        if (Contains(groupKey) && objects[groupKey].Count > 0) // Если есть в контейнере и контейнер не пустой
        { 
            for (int i = 0; i < objects[groupKey].Count; i++) // перебираем контейнер
            {
                if (objects[groupKey][i] is T) // если тип соответствует
                {
                    result = (T)objects[groupKey][i]; // присваиваем результату соответствие
                    Type type = result.GetType(); // получаем тип
                    RemoveObject(groupKey, i); // удалем из базы данных
                    RemoveFromCache(result, type); // удаляем из кеша
                    result.Create(); // вызываем псевдо-конструктор
                    break; // дальше что-то искать нет смысла, обрываем
                }
            }
        }
        return result; // получаем результат
    }

Как видно я просто перевел конструкции языка и методы на русский язык. По поводу комментариев, рекомендую почитать книгу «Стив Макконнелл — Совершенный код». А конкретно почему комментарии не всегда хорошо и что-то такое само-документирующий код. Встречал код людей которые правят код, но не правят комментарии. Вот это действительный корень зла. Напиши нормально, что делает метод в его заголовке. Напиши смысл переменной не жалея слов. В этом и есть вся красота интерфейсного программирования.

Дело не в комментариях к коду, а в объяснениях, зачем было выбрано именно такое решение, и почему так. Тогда получился бы туториал с хорошей заявкой на обучение новичков.
Что такое if или foreach знает каждый программист, который учится больше нескольких недель. А вот на этих вопросах можно было бы и остановиться подробнее:
— для чего был создан интерфейс IPoolObject
— почему был выбран стек (псевдостек) для хранения объектов в пуле
— для чего были выбраны именно такие методы в классах (имя метода OnPush в интерфейсе, на мой взгляд, отражает технические особенности пула, а не назначение этого метода)
— как организован доступ к пулу (через статическое поле Instance, такой полу-синглтон. Кстати, зачем дублировать в менеджере все методы самого пула? ведь вместо Instance = this можно было написать Instance = poolManager)
— что такое yield?
— в самом начале вы указали, что ваш пул можно использовать в Photon Server. Другие пулы нельзя в нём использовать? Что вы сделали, чтобы можно было. И вообще — что такое Photon?

Если бы в статье были ответы на эти и подобные вопросы, тогда получился бы отличный туториал, который оценили бы гораздо выше. А сейчас получилась статья в стиле «смотрите как я умею!», на что я и ответил в первом комменте.
Да согласен, интерфейс нужно детальней описать и примеры тоже. Photon Server это сетевое решение от Exit Games аналог SmartFoxServer только тот на Java, а этот на C#. По поводу Instance, нужен именно доступ к юнити расширению PopOrCreate, поэтому и продублировано. Было бы множественное наследование)
Я-то знаю, что такое Photon (хотя и лично с ним не работал), но раз в статье вы сказали о нём, то хорошо было бы об этом рассказать подробнее.
Эти вопросы я написал не для того, чтобы вы мне ответили тут, а чтобы показать, о чём было бы хорошо рассказать в статье, чтобы статья получилась цельная и полезная. Предлагаю вам в следующей статье больше внимания уделить не только сути (коду), а хорошему описанию, с обоснованием принятых решений и обзором тонких нюансов.
Sign up to leave a comment.

Articles

Change theme settings