• MVC реализованый через Controller, Entity, Repository, Service это как?

    gzhegow
    @gzhegow
    Думал, стану умнее, когда адаптируюсь, но нет
    Controller
    -- ProductController
    -- UserController
    spoiler
    ну тут ты все знаешь, это класс где в виде функций хранятся частные случаи твоей программы, или по-русски - страницы сайта. здесь формируется массив исходных данных и разбирается GET/POST/RAW. Здесь прогоняется валидация. И полученный обьект или массив идет дальше в сервис

    Model
    -- Entity
    ---- ProductEntity
    ---- CategoryEntity
    spoiler
    это твоя модель к которой ты привык. Но в ней нету никаких ->save(), ->insert() и так далее. Просто пустой обьект со свойствами и функциями, которые эти свойства позволяют установить и получить. в случае с фреймворками - энтити является прослойкой для ActiveRecord. То есть везде в коде ходят Entity. А у каждой энтити есть внутри AR-обьект (обернуто)

    -- Repository
    ---- ProductRepository
    ---- UserRepository
    spoiler
    это класс, который умеет брать пачку Entity и сохранять их в базу. Или наоборот - запрашивать из базы, отдавая тебе пачку Entity. В простом случае запросы в базу лежат прямо в нем. В чуть более сложном случае он является прослойкой, которая говорит Адаптеру - делай. Говорят что все возможные фильтры и сортировки в виде кусочков, которые можно добавить к построителю запросов тоже хранятся здесь. Соответственно для файлов это придется делать как-то по-другому, у нас ведь нету "запроса к файлу", есть только открыть, перейти на строку или считать целиком

    ---- Adapter
    ------ MysqlAdapter - сохраняет и получает только в базу
    ------ FileAdapter - сохраняет и получает только в файл
    ------ ElasticSearchAdapter - сохраняет и получает только в индекс эластика
    ------ ... и тд
    spoiler
    это кусок репозитория, еще один обьект, который знает КАК ИМЕННО нужно сохранить то, что сохраняет репозиторий. Или как именно получить.

    -- Service
    ---- ProductService
    ---- UserService
    spoiler
    это класс, который умеет делать из входящих, уже проверенных валидатором данных = Entity. На вход кидаешь объект запроса или массив сложный большой, а в нем, под капотом в функциях разбираешь его до тех пор пока не получится массив Entity или одна Entity. В случае с запросом данных, а не их созданием - отсюда вызывается репозиторий, чтобы получить Entity. Когда Entity создан - тут же репозиторий вызывается, чтобы его записать. Сюда же лягут всякие registration() для юзера например, или методы запросов пачки или одной записи с учетом того, что пользователь может захотеть не все поля, или задать сортировку

    View
    spoiler
    тут все ясно. в простом случае - это просто файлик шаблона. в более сложном - класс, который на вход принимает данные от сервиса, на выход отдает их в виде JSON или Хтмл, или Xml (может оборачивать в постраничную навигацию по дороге - но это в каком-то смысле и репозитория задача, когда у тебя постраничная от хранилища зависит), потом программа сделает (new ProductsView($data))->send(); и отдаст их пользователю, проставив заголовки что это там JSON или XML

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


    ps.
    Но сколько бы ты не читал моё понимание, архитекторы все равно тебе скажут, что ты не так понял, и иди ещё почитай. Это бесконечный цикл о том как ты пытаешься доказать архитектору, что ты тоже архитектор, а он тебе говорит, что ты ещё молокосос (ведь рынок - это сафари - или ты гоняешь, или тебя)

    Хочется верить что наступят времена когда вместо "невозможно" начнут применять "интересно, как это возможно" и вместо "да ты гонишь" начнут применять "а не мог бы ты рассказать почему это работает", но за 2000 лет ещё не навоевались.
    Ответ написан
  • Оператор clone в php: как работает?

    ivankomolin
    @ivankomolin
    Это сделано для того, чтобы при клонировании объекта Person, одно из его свойств(которое является объектом) тоже было клонировано.

    Пример:
    $person1 = new Person;
    //Например $person1->address это объект со свойством id = 1
    $person2 = clone $person1;
    //Устанавливаем свойство id для объекта $person2->address
    $person2->address->id = 2;
    echo $person1->address->id; //выведет 1
    echo $person2->address->id; //выведет 2


    Теперь представим что public function __clone() {} внутри класса Person нет
    $person1 = new Person;
    //Например $person1->address это объект со свойством id = 1
    $person2 = clone $person1;
    //Устанавливаем свойство id для объекта $person2->address
    $person2->address->id = 2;
    echo $person1->address->id; //выведет 2
    echo $person2->address->id; //выведет 2

    Т.к. объект Address не был клонирован, мы обращаемся к одному и тому же объекту Address
    Ответ написан
  • Как настроить Xdebug в docker?

    denisbondar
    @denisbondar
    Python, PHP developer
    Полное описание использования xdebug с PhpStorm и интерпретатором в Docker-контейнере описано у меня в статье. Может быть кому-то пригодится.
    Ответ написан
  • Как встроить чат на angular в сайт написанный на yii2?

    mazhekin
    @mazhekin
    Frontend, Backend Web Developer
    Не слушайте никого и используйте ангулар где хотите, хоть в статичных страницах, хоть в других фреймворках. Смотрите сюда, ангуляр крут Angular Elements
    Ответ написан
  • Как стать javascript разработчиком?

    Zoominger
    @Zoominger
    Сись админ
    Как устроиться джуном?

    Иметь пет-проекты и официальный опыт работы от года.

    Есть мнение что лучше сразу устроиться в компанию имея минимальные знания по языку.

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

    Перейти рубеж в 120к за какое время реально при условии адекватного работодателя? Фултайм в Мск.

    Около 7-9 лет. Да-да, сейчас прибегут вайтишнички с рассказами, как их одноклассник рубит по 400k на PHP, особо не напрягаясь, но объективная реальность такова, что з/п за 100 имеют только сеньоры и тимлиды, а это 7-9 лет опыта.

    Очевидно, вы стали жертвой Хабра и рекламы курсиков. Сочувствую.

    Ха, лол, только заметил:
    Погуглил что во фронтэнде нехватка спецов, а зарплаты в очень широком диапазоне.

    Пфффпхавхахахахахахаааа *захлёбывается слюнями*
    Спецов, может, и нехватка, а вот вайтоты просто огромные толпы и конкуренция среди трейни и джунов невероятная, благодаря чему диапазон зарплат разнится от "бесплатной стажировки" до "20-25 тысяч в мегаполисе". Да, вы точно жертва рекламы. Откуда вы такие берётесь-то в 32 года?
    Ответ написан
  • Недавно начал изучать питон,и решил сделать скрипт с возрастом,но он работает не так,пожалуйста скажите что не так?

    adugin
    @adugin Куратор тега Python
    messages = {
        14: 'Ты ещё маленький, тебе нужно подрасти',
        20: 'Ты ещё не взрослый, но уже подросток',
        50: 'В меру упитанный мужчина в полном расцвете сил',
        99: 'Да ты уже старик',
        120: 'Тебе на кладбище давно прогулы ставят'
        666: 'Столько не живут'
    }
    
    age = int(input("Введите свой возраст: "))
    
    for age_threshold, message in messages.items():
        if age <= age_threshold:
            print(message)
            break
    Ответ написан
  • Как json перевести в массив?

    Melkij
    @Melkij
    PostgreSQL DBA
    По виду похоже на дважды закодированный json. То есть
    $out = json_decode(json_decode($var), true);
    Ответ написан
  • Как воспроизвести одновременно видео на 2 мониторах без дублирования экранов?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Я для этой цели использую OBS - он делает захват выбранного окна, дальше включаю preview stream и projector на второй монитор, и сворачиваю OBS.

    Для синхронизации между компами использую SyncPlay + MPC-HP. Может его получится и на одном компе запустить дважды и синхронизировать, но думаю будет проблема с переключениями в плейлисте.
    Ответ написан
  • Фотошоп в ubuntu?

    @tomatopotato
    апельсиновый рай!
    Работает Cs6 через wine, с небольшими багами. Умельцы запускают CC у меня к сожалению не получилось. Дело в том что CC завязан на работу через ускорение GPU и через wine у него начинаются проблемы. После долгих попыток я пришел к лучшему решению для себя win10 + xubuntu с отключенным графическим сервером в виртуалбокс. Это решение стало идеальным. Я использую удобство Линукс как сервера и кручу локалхост под ним на апаче и в тоже время использую графическую мощь win10. Сервер крутится в виртуалке и поедает всего 256 мб памяти. Я через общие папки спокойно веду разработку в win и тут же тестирую в линуксовом локалхосте. Нет никаких проблем с фотошопом естественно. Так что если работаете с графикой, но нужен Линукс как сервер( а больше он ни для чего и не нужен фронт разрабу) то советую связку win10 + virtualbox с линукс - графическое окружение + общие папки и будет вам счастье. Мощь Виндоус и простота настройки Линукс.
    Ответ написан
  • Как быстро засыпать чтобы было больше времени на изучение программирования?

    Zoominger
    @Zoominger
    Сись админ
    Б-же, до чего же у вас много свободного времени.

    Покупаете две гантели киллограмм по 10 и размахиваете ими часа за два до сна. Потом отжимаетесь. Потом приседаете. Потом повторяете всё сначала, пока сердце из ушей не полезет. "Хватит" - это когда насквозь промокли труханы, футболка, а на трениках разлилось большое потное пятно.

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

    Альтернатива - литр пива за 1,5 часа до сна или две плюшки [ЗАБЛОКИРОВАНО РКН] за час до сна.

    И кста, "больше времени на изучение" никогда не равно "будет эффективнее".
    Ответ написан
  • ЯП для информационной безопасности?

    Zoominger
    @Zoominger Куратор тега IT-образование
    Сись админ
    Посмотрел сериал "Мистер Робот", очень понравилась специальность главного героя, а именно "Информационная безопасность".

    Вам рано в IT.

    Тем не менее, для безопасника языки не нужны, можете поучить Bash какой-нибудь.
    Ответ написан
  • ЯП для информационной безопасности?

    @Araya
    Пожалуйста, скажи что ты не серьезно! Как можно выбрать специальность посмотрев сериал? А если посмотрел бы Доктора Хауса пошел бы посвятил 1000500 лет своей жизни медицине?
    Ответ написан
  • Как хранить дату рождения в базе данных?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Преобразуйте колонку в формат DATE (вместо DATETIME, TIMESTAMP).
    Ответ написан
  • Не работает querySelectorAll?

    dollar
    @dollar
    Результат querySelectorAll - это как бы массив.
    document.querySelectorAll('.div2')[0].style.width
    Ну и селектор не "div2", а ".div2", ибо нужно выделить класс.
    Ответ написан
  • Почему второй элемент растягивается больше чем его родитель?

    Элементу с иксами поставьте свойство:
    word-wrap: break-word;
    Текст будет переносится и не вылазить по перед батьки.
    Ответ написан
  • Как можно обезопасить свой сайт от запросов такого вида?

    @alex1478
    1. Можно при загрузке переименовывать файлы, давая файлам названия наподобие d025a9501c8e4c95b614ef0a18796354.txt. Наиболее оптимальный вариант для статики.
    2. Можно отдавать пользователям файлы через php скрипт (или что там у вас): что бы запросы к файлам были вида example.com/download.php?file=d025a9501c8e4c95b614ef0a18796354. Обращение к файлам напрямую запрещаете средствами веб сервера.
    Ответ написан
  • Можно ли играя в игры улучшить память?

    dollar
    @dollar
    На вопрос нельзя точно ответить, потому что научные опыты в этой области ещё не проводились. Есть гипотеза, что игры могут улучшать кратковременную и рабочую память, но доказательств пока нет.

    Так что гипотетически память улучшить можно. А реальный ответ узнаем в ближайшие годы.
    Ответ написан
  • В каких случаях должно применяться кеширование данных?

    l3ftoverz
    @l3ftoverz Куратор тега Веб-разработка
    Люблю Финский металкор
    Кеш нужен тогда, когда данные изменяется не очень часто, и их вычесление стоит дороже, чем сохранить их в уже готовом виде. Например, шаблоны страниц, какой смысл их каждый раз генерировать из какого-то там Smarty в PHP, если они статичны?
    Ответ написан
  • Как правильно обернуть тег h2 ссылкой?

    wapster92
    @wapster92 Куратор тега CSS
    Люблю трилогию ME
    На данный момент можно в тег ссылки засовывать блочные элементы. А на будущее почему бы не пользоваться валидатором и не задавать глупых вопросов.
    Ответ написан