Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Ruslan Kvashuk
    @rossanoua
    @tensor146 спасибо, видел
    но к примеру
    singleton
    обязательно класс должен быть final?
    или
    должен выполнять одно условие создавать один единственный экземпляр на все приложение?
    Evgeny
    @tensor146
    Паттерны - это в первую очередь идеи, некие шаблоны, по которым нужно действовать. Т.е. final не обязателен, методы могут называться по-другому и так далее.

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

    А это как раз идея синглтона.
    У тебя есть некий объект, который инициализируется только один раз и используется всегда именно он.

    Ruslan Kvashuk
    @rossanoua
    про методы понятно и так...
    а вот саму идею что бы глубоко понять
    для каждого паттерна ни где такого не найти?
    про синглтон спасибо )))
    Evgeny
    @tensor146
    В первую очередь, нужно смотреть на код и описание, а также на применение и задавать вопрос: "почему сделано именно так, а не иначе?"
    Во вторую, можно для каждого из них гуглить статьи вида: https://habrahabr.ru/company/mailru/blog/325492/ После третьей ссылки начинаешь чувствовать идею обычно :)
    В третью, можешь посмотреть тут - это переводы статей Фаулера, а он знает толк в паттернах :) http://design-pattern.ru
    Ruslan Kvashuk
    @rossanoua
    @tensor146 спасибо за помощь!
    Evgeny
    @tensor146

    @rossanoua пожалуйста

    по которым нужно действовать

    Можно действовать*

    Т.к. тот же синглтон, вообще говоря, считается антипаттерном.

    Ruslan Kvashuk
    @rossanoua
    @tensor146 да, это знаю... )
    Renato Marinho
    @renatomarinho
    This message was deleted
    David D Crosby
    @davidc4991vvc
    connectiom.PNG
    I am in need of some help cant connect to my database please check my script
    NitroCode Alex
    @9trocode
    @davidc4991vvc let me help you with that
    mikeevstropov
    @mikeevstropov
    Народ, кто в опенсорсе использует приватные методы классов? Есть такие?
    Я просто хочу узнать, чем руководствуется разработчик опенсорс библиотек, когда пишет private вместо protected.
    Igor
    @1gorsh
    @mikeevstropov мб, тем что хочет уберечь юзверей от бездумного наследования, а соответственно и себя от issues когда неплубличний метод випилии в новой версии а у юзверей все сломалось
    наследоваться от того что тебе неподконтрольно не очень хорошая идея
    mikeevstropov
    @mikeevstropov
    @ishubelko То есть, представим ситуацию: Я разработчик какой-то либы для работы с Curl. Часть методов класса у меня публичные, часть приватные. Я не использую "протектед" методы сознательно, что бы ни кто не мог унаследовать мою библиотеку и расширить ее до нужного функционала, по той причине, что якобы могут появиться какие-то неадекватные issues, по типу - "я переписал методы и теперь это работает не как ожидалось"? Верно?
    Igor
    @1gorsh
    Расширить ето не только унаследовать - декорация, агрегация. Вместо бездумного наследования заведи интерфейс которий удовлетворит требованиям твоего клиентского кода и реализуй его как душе угодно - тогда проблем з зависимостями будет немного меньше
    mikeevstropov
    @mikeevstropov
    @ishubelko По вашему, если мне нужен весь интерфейс библиотеки, мне нужно дублировать все публичные методы в декораторе?
    Igor
    @1gorsh
    я не знаю какой там у вас юз-кейс и что конкретно вас не устраивает, я говорю о том о что хорошой практиктой считаеться завести интерфейс которий удовлетворяет ожиданиям вашего клиентского кода а дальше уже реализуете етот интерфейс так как считаете нужним - нужно проксировать кол к методу либи - проксируете - нужно декорировать - декорируете
    что такое весь интерфейс библиотеки ? может одного класа?
    mikeevstropov
    @mikeevstropov
    @ishubelko Речь не идет о клиентском коде и о моем личном "юзкесе" какой-то либы. Вопрос был про адекватность применения "private" методов в опенсорс библиотеках. Но раз уж вы указали как одну из причин версионирование, тогда еще вопрос. Вы активно используете прилагательное "бездумный". Можно ли его применить к разработчику библиотеки, который будет менять ее интерфейс на минорных версиях и патчах? Потому как других возможных проблем связанных с обновлениями при перезаписи какого-то метода интерфейса не вижу. По вашему последнему вопросу, возникает новый вопрос. Вы не считаете библиотеку таковой, если она содержит всего один класс?
    Igor
    @1gorsh
    без указания юзкейса использования и самой библиотеки я не могу судить о адвекватности или неадекватности
    бил задан вопрос о private в опенсоурсе - мое мнение - ето нормальная практика
    дальше что то обсуждать без конкртеного примера не продуктивно
    mikeevstropov
    @mikeevstropov
    @ishubelko Да бесит просто. Берешь любую популярную либу, все как для людей - наследуй не хочу. А стоит только добавить в зависимости от какого-то Васи Пипсичкина - получаешь геморой. Который раз уже горит от таких умников.
    Igor
    @1gorsh
    не юзайте тогда - если оно вам не подходит
    на счет: менять ее интерфейс на минорных версиях и патчах в том то и дело что интерфей ето публичние методи - остальное детали реализации, они не должни бить доступни и они могут меняться
    mikeevstropov
    @mikeevstropov
    @ishubelko Так про публичные методы и речь. Вы как их расширять собрались, если они вызывают приватные?
    Igor
    @1gorsh
    декорация, агрегация - если есть такая возможность
    если нет OCP принцип
    если поведение метода/функции не подходит под ваш юз-кейс - не нужно в него "впихивать" другую реалицию для того что ето поведение подошло вам, лучше сделать новую реализацию которая вам нужна
    mikeevstropov
    @mikeevstropov
    @ishubelko Для того, что бы ограничивать других в опен либе нужен аргумент. Если этого аругумента нет - это как Вы выражаетесь "бездумный" подход. Я пытался найти хоть один аргумент использовать приватные методы в библиотеках. Пока достойных аргументов не нашел. По поводу декорации и агрегации, еще раз задам вопрос. Мне действительно нужно дублировать интерфейс библиотеки в декораторе, вместо того, что бы его унаследовать, и не плодить кучу бесполезного кода?
    mikeevstropov
    @mikeevstropov
    @ishubelko Прошу прощения, не заметил про "OCP". Почему вы его указали? Он же категорически противоречит присутствие private методов.
    Igor
    @1gorsh
    оо? можно пример?
    mikeevstropov
    @mikeevstropov
    @ishubelko Пример чего? Почему наличие private метода противоречит этому принципу? Даже не знаю... Может потому что там так и написано?
    should be open for extension, but closed for modification
    SanjayJaiswa
    @SanjayJaiswa
    I have one php code and need to run it argent please can anyone help
    Renato Marinho
    @renatomarinho
    This message was deleted
    Evgeny
    @tensor146

    Привет. Помогайте, а то сойду с ума.

    $some = $this->getContext() ? $this->getContext()->normalize() : NULL;

    Вываливается "Call to a member function normalize() on null"

    При этом $this->getContext() это

    public function getContext() {
        return $this->context;
      }
    О_о
    Denis Mazur
    @lans8097
    Привет всем. вообще занимаюсь Laravel, но попросили сделать правки на OpenCart сборка OcStore 2.2.
    Я в магию не верю, но у меня скоро мозг лопнет от непонимания ситуации....
    Правлю генератор меню и не могу понять откуда берётся третья вложенность.
    Что я не вижу ?
    Сам код
    <?php
    $data['categories'] = [];
    
            $categories = $this->model_catalog_category->getCategories(0);
    
            $massIcons = [
                    0 => '<i class="glyphicon i1"></i>',
                    1 => '<i class="glyphicon i2"></i>',
                    2 => '<i class="glyphicon i3"></i>',
                    3 => '<i class="glyphicon i4"></i>',
                ];
            $iconCount = 0;
    
            foreach ($categories as $category) {
                $childIds = [];
                $childIds[] = $category['category_id'];
    
                if ($category['top']) {
                    // Level 2
                    $children_data = [];
    
                    $children = $this->model_catalog_category->getCategories($category['category_id']);
    
                    foreach ($children as $child) {
                        $childIds[] = $child['category_id'];
    
                        echo '<b>child:'.$child['name'].'</b><br>';
                        $children_data[] = array(
                            'name'  => $child['name'],
                            'href'  => $this->url->link('product/category', 'path=' . implode('_',$childIds))
                        );
                    }
    
                    // Level 1
                    echo '<b>cat:'.$category['name'].'</b><br>';
                    $data['categories'][] = array(
                        'name'     => $category['name'],
                        'children' => $children_data,
                        'column'   => $category['column'] ? $category['column'] : 1,
                        'href'     => $this->url->link('product/category', 'path=' . implode('_',$childIds)),
                        'icon'     => $massIcons[$iconCount]
                    );
                    $iconCount++;
                }
            }
    
            echo '<pre>';
            print_r($data['categories']);
            echo '</pre>';
            die("STOP SUKA !!!!");
    ?>

    Вот что выводит
    ``
    child:БЫТОВЫЕ КОНДИЦИОНЕРЫ
    child:МУЛЬТИ СПЛИТ СИСТЕМЫ
    child:ПОЛУПРОМЫШЛЕННЫЕ КОНДИЦИОНЕРЫ
    cat:КОНДИЦИОНИРОВАНИЕ
    child:ТЕРМОСТАТЫ
    child:ВОДА
    child:КОТЛЫ
    child:ТЕПЛОВЫЕ НАСОСЫ
    child:РАДИАТОРЫ
    child:ОБОГРЕВАТЕЛИ
    child:ТЕПЛОВЫЕ ПАНЕЛИ
    child:ТЕПЛОВЫЕ ЗАВЕСЫ
    cat:ОТОПЛЕНИЕ
    child:СТАБИЛИЗАТОРЫ НАПРЯЖЕНИЯ
    child:ИСТОЧНИКИ БЕСПЕРЕБОЙНОГО ПИТАНИЯ
    cat:ЭЛЕКТРОПИТАНИЕ
    cat:УВЛАЖНИТЕЛИ

    ``

    Denis Mazur
    @lans8097

    Ответ полностью не влазит пришлось грузить на дамп
    https://dumpz.org/c4kBePGR4Txb

    Если посмотрите то увидите что есть третий уровень вложенности у Вода тобиш третий, но в коде нет его....
    Что я упускаю ?

    Denis Mazur
    @lans8097

    Может я схожу сумма ?

    Как видите переменная $data['categories'] создаётся в самом начале и после прохождения выводится на экран после чего сценарий принудительно останавливается.

    Я вижу что генерируется массив с двумя уровнями вложенности, но по факту выходит три уровня вложенности.....

    Kirill Nesmeyanov
    @SerafimArts
    код - говно
    в этом и причина
    )
    Denis Mazur
    @lans8097
    @SerafimArts Таки да =) как и весь OpenCart
    rammanoj
    @rammanoj
    Hey, I am trying to upload files in PHP. I am using blueimp file up-loader. But I have a basic script. I don't know how actually the chunked code work. I think the code here https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php is only for the image uploads right ? I am trying to upload videos and other stuff using it but the video is getting uploaded properly. So, Is there any way to upload files in php ?
    with chunks
    Renato Marinho
    @renato2marinho_twitter

    Hey guys, I'm GitScrum founder. I want to invite group members to get to know GitScrum. Site: https://site.gitscrum.com/

    GitScrum’s agile approach to project management has proven itself to be a time and money saving strategy with the flexibility to keep up with rapid changes.