All streams
Search
Write a publication
Pull to refresh
38
0
Maxim Antonov @maxidler

User

Send message
Реализуемо, но инстанцировать другой контроллер бывает достаточно дорого в плане ресурсов (бутстрапинг контроллера). Снова сказывается специфика проекта.

Через весь топик и мои комментарии проходит мысль: прежде чем применять решение, пусть даже уже вылизанное годами и миллионами разработчиков — подумайте еще раз — подходит ли оно вам?

Бывают случаи когда нужно писать говнокод, ибо привести в порядок унаследованное спагети дорого, а новая фича должна приносить деньги еще вчера и каждый день до релиза стоит компании порядка 1 000 000 рублей.
Будем три дня рефакторить или допишем спагетти за полдня, потом полдня потестируем и завтра — релиз ????????
Что ж, бывае и такое. Кстати даже не редко!
Возможно вы правы, но повторю, что реализацию часто диктует специфика проекта
Когда модель растет — есть тоже несколько вариантов выхода из ситуации. И снова ответственность за выбор лежит на разработчике.

1. Писать Helpers — ваш вариант
2. Строить иерархию наследования.
3. Делить модели
Опять же! Все зависит от проекта!
Иногда нужно тупо поставить костыль или написать спагетти-код. Это не плохо! Это один из вариантов решения задачи!

Ответственность за то, какой вариант выбрать лежит на разработчике. Городить иерархию классов для вывода символа Евро в одном месте (надуманный пример) — тоже плохой вариант.
Если выстраивать иерархию наследования контроллеров — обычно начинается бардак.
Договоримся, что если класс наследует другой класс, то к имени родителя добавляется буква.
Имеем классы a,ab,ac,aba,abb,abc,aca,acb,acc,ad,ada,adb,adba
Если в классе adba нужен функционал, определенный в классе ab, но в классе adb он совсем не нужен, как мы будем поступать? В Pyton мы наверное будем использовать множественное наследование, но я пока плохо представляю, как оно работает. В PHP6 мы будем использовать Traits. А что делать в PHP5 ??? Выход: copy_paste === Бардак.

А если, как сказали Вы наследовать контроллеры от разных БАЗОВЫХ классов — то бардак более чем очевиден.

Или я не так Вас понял?
А как? Я логинюсь с компа сертификатом x509. Как мне подсунуть его умолчательному браузеру в Android?
Наоборт, чтобы не вынуждать писать верстальщика отдельный шаблон я использую инструкцию include/apply шаблонизатора. Потому блок с новостями может быть вставлен в любое место шаблона или лэйаута.
Один раз сверстав составляющую новостей верстальщик пользуется тегом {{include /}}. Но я говорил о том, что данные нужно выбирать только там, где они нужны, а потому иерархия наследования контроллеров (на мой взгляд) здесь не подходит.

И снова возвращаясь к специфике проекта: в каждом проекте это выглядит по разному — все зависит от проекта.
А выборка и пойдет в модели, но вызов модели будет не в контроллере с последующим PUSHем в шаблон, а непосредственно в шаблоне:
$news = News::findByCriteria(Criteria::contains('name','Путин'),array('limit'=>5,'order'=>array('date'=>'desc'))

Автор осилил понятие MVC, похоронив 3 собственных PHP-фреймворка, являясь коммитером одного из мало-популярных фреймворков и найдя порядка 20 багов/граблей в одном из популярнейших фреймворках.

Пример про новости, конечно надуман, но часть реальной ситуации он отражает. Никто не говорит, что в шаблоне будет использован прямой SQL-запрос — там будет что-то вроде $lastNews = News::getLastPublished(5)

На моей практике встречалось немало ситуаций, где приходилось рушить и без того размытые рамки MVC. Где-то ради производительности, где-то ради читабельности кода.

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

Заметьте, я не сказал, что так нужно делать везде — через всю статью проходит мысль о том, что все зависит от специфики проекта. И цель статьи — предупредить шаблонный способ мыслить у новичков, прочитавших предыдущую статью в блоге «Разработка».
Ну я и не говорил про банду четырех.

А размытость действительно объясняется архитектурностью (так сказать) паттерна, но далеко не у всех архитектурных паттернов присутствует размытость.

Я намеренно смешал паттерн банды Observer и архитектурный паттерн, т.к. начинающие программисты-архитекторы, у которых еще не сформировался свой взгляд на этот мир узнают MVC еще до прочтения о Singleton. Тут то и начинается поиск серебряных пуль.
Про X-Window… Возможно, когда Эрик писал книгу все было гораздо лучше, чем сейчас. Сейчас мы имеем следующее: протокол не стандартизирован и аналогов системы нет (X86 и XOrg — практически одно и то же, точнее — второй потомок первого — почти мертвого). Протокол явно устарел, но его работа и хаки над ним на данный момент всех устраивают, а потому никаких новых разработок в этой области не ведется, если не принимать во внимание тайловые менеджеры рабочего стола.
Ага. Уникальный опыт с Windows script Host у нас имеется.

По просбе Рауфа распишу поподробнее.

Писали мы инсталятор для XP.

Инсталятор этот должен был снести MySQL, Adobe Air и nCron из состава старой софтины, затем установить наш новый софт состоящий из Apache,PHP,nCron,Chromium-portable, fonts, images и собственно PHP-приложения.

Стандартные install-генераторы нам не подходили, ибо установка должна была проходить в один клик и были специфические вещи, с которыми стандартный генератор не справится.

Итак задача полностью:
Запуск из-под админа.
Снести службу MySql
Снести службу nCron
Установить консольный zip.exe
Распаковать части нового ПО и раскидать по своим местам
Дать права на часть новых файлов в системе непривелегированному пользователю some_user
Зарегистрировать службу Apache и прописать ей авто-старт
Зарегистрировать службу Cron и прописать ей авто-старт
Прописать в PATH пути до hg.exe и php.exe, чтоб потом не мучаться
Пользователю some_user в автостарт прописать вместо explorer.exe (ну там уже не explorer, а Air приложение) Chromium в полноэкранном режиме.
Забрать с сервера данные
Сменить разрешение экрана
Перезагрузиться, чтобы приложение стартовало при загрузке.

Мне как, пользователю Linux на своей системе нацарапать такой инсталятор на Bash — полчаса.
Когда-то давно я помню игрался с Windows script Host, потому решил, что за полдня я этот инсталятор напишу.

В итоге вышло ДВЕ НЕДЕЛИ на разработку инсталятора. И это при всем том, что мне постоянно помогал очень грамотный в WSH Windows-админ. (Спасибо, Дима!)

Мы встретили много нелогичностей

1. Где-то надо использовать двойные кавычки, а где-то одинарные.
2. Чтобы запустить системную команду иногда нужно писать cmd /c command
3. Как поменять права на папку рекурсивно скриптом, не проходя вручную по дереву не нашли, пришлось после создания пустой папки присваивать ей права и устанавливать атрибут наследования прав подкаталогами.
4. Шрифты простым копирование в каталог Windows/fonts не устанавливаются. Нужно после этого открыть explorer.exe на этом каталоге, чтоб винда автоматом установила эти шрифты, ну или писать каждый фонт вручную в реестр.
5. Ветки реестра пользователей назваются не по имени а по какому-то SID, чтобы его найти нужно сделать запрос (нечто типа SQL) к WMI (Windows Management Interface) и забрать этот SID по имени пользователя.
6. Записать в чужую ветку даже из-под админа просто так не получится. Ветка не подгружена — надо залогинить пользователя в систему. Но как сделать это в скрипте??? Лучшего способа мы не нашли: стартанули службу планировщика задач, установили задание на calc.exe через полчаса, принудительно стартанули задание — Ура!!! Пользователь залогинен.
7. Реестр вроде удобная вещь и все настройи системы должны храниться там, но вот беда — с разрешением экрана какая-то Ж… Там столько всего нужно поменять… Пришлось взять какую-то консольную программку — qres.exe.
8. В дополнение ко всему такие вещи как запись пользователю в реестр, исполнение qres.exe работают нестабильно, потому приходится проверять результат и повторять операцию.

9. ага, вот еще вспомнил — в параметрах комманды sc (Service Control) есть параметр старт… Так вот мы долго ржали, когда поняли, что start=auto не работает, но работает start= auto (с пробелом — это должны быть разные argv[ ] ) :) ( чтобы выключить компьютер нажмите кнопку «пуск» — Где логика???)

Вкусный опыт правда? После этого я уже не говорю, что Windows простая или плохая система. Для меня не подходит — да! Но теперь я знаю, что она гораздо сложнее *nix в тех местах, где эта сложность не нужна. Я уверен, что Windows нужно просто знать, и еще больше уверен, что людей, действительно знающих Windows очень не много! На моем пути был только один (все тот же Дима).

Мои выводы: под Windows писать софт я постараюсь не браться. Если нужно просто, быстро, стабильно и предсказуемо — Выбирайте *nix. Unix way is my way.
Например я ВСЕРЬЕЗ думаю, что такой софт пишется на коленке, и даже не студентами, а недошкольниками!
Исхожу из горького опыта — чем сложнее софт, тем более студенческий мозг его проектировал…
Я был участником, точнее спасателем одного из таких проектов, хозяева которого не проработав детали и риски отдали разработку на аутсорс. Скажу сразу, что спасти ничего не удалось.

Вся комичность ситуации была в том, что компания заключившая договор с заказчиком не имела собственных разработчиков и всю разработку вела на аутсорс. Круто???

Моя задача состояла в том, чтобы контролировать разработку, которая велась командой фрилансеров в Кишиневе.

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

Ситуация еще более усложнялась тем, что я никак не мог прогнуть линию разработки в нужную сторону. Инвесторы требовали запуска проекта и начала продаж рекламы. Функционал, которым обладал софт был неудобен и неполон. Мой непосредственный начальник решил, что главное — это цвет интерфейсов и начал полный редизайн. На все мои мольбы о переносе разработки в локальное пространство ответом было лишь непонимание, а моя аргументация игнорировалась и до верхнего начальства не доносилась.

Все закончилось достаточно хорошо. Поняв, что ждать от такого проекта даже запуска — бесполезно, я просто ушел. Я теперь работаю с интересными людьми (включая автора статьи), а проект через 3 месяца был закрыт.
Насчет того, что в сфере спец. софта аутсорс не самое лучшее решение — я согласен.
Насчет того, что вливание в проект долгое — НЕ согласен.

Все зависит от сложности софта и квалификации разработчика. Например на проект продаж через киоски был запущен в тестовом режиме (альфа) уже через 3 месяца после моего прихода в компанию.

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

Сейчас нам предстоит при помощи аутсорс-компании добавить в этот проект кусок функционала всего за месяц. Я склонен полагать, что все пройдет удачно.

Нет. Команда осталась, продукт развивается.
Вот сейчас некоторые части продукта отданы на аутсорс, именно по той схеме, когда один из локальных разработчиков является частью команды.

Именно я тот локальный… По окончании проекта попробую описать впечатления.
«По одному из наших программно-аппаратных решений по продажам через киоски»

Вот так у нас и сделали. Написали свой софт с нуля и убили софт конкурентов.
Все кто работает с софтом оказались очень довольны.
Так бэкапы-то на что? На такие же винты рядом…

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity