Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Неймспейсы опять #215

Open
AlexeyDsov opened this issue Aug 7, 2014 · 8 comments
Open

Неймспейсы опять #215

AlexeyDsov opened this issue Aug 7, 2014 · 8 comments

Comments

@AlexeyDsov
Copy link
Member

Раз уж в соседней теме затронули неймспейсы и есть интерес, то у меня есть ветка masterNs с неймспейсами. И сейчас я её добавил и в этот, основной, репозиторий.

Особенности ветки.

  • в ней должны быть все фиксы фичи из мастера.
  • все файла onphp находятся в линейном неймспейсе Onphp
  • в мету добавлены аттрибуты namespace для classes и class что бы задавать в каком неймспейсе должны быть сгенерированы классы.
  • добавлен в каком-то виде конвертер, позволяющий сконвертировать какой либо код на неймспейсы. Но он не слишком протестирован (использовал всего два-три раза что бы добавить неймспейсы проекту) и как-то сложно запускается. Т.е. требуются те кто поэсперементировал бы с тем что я когда-то написал. Последняя версия конвертера находится в отдельной ветке masterNsConverter.
  • Так же есть ветка masterNsTw которая отличается от masterNs на один коммит в котором добавлен TaggableDaoWorker, но не вошедший в masterNs из-за, кажется, несколько ломающегося BC, связанного с использованием lazy и связыванием объектов между собой до их сохранения.
@glushchenko
Copy link

Отлично, спасибо!

@pupkinV
Copy link
Contributor

pupkinV commented Nov 29, 2014

@AlexeyDsov вы у себя на проекте применили эти изменения?

все файлЫ onphp находятся в линейном неймспейсе Onphp

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

@AlexeyDsov
Copy link
Member Author

У себя на проекте применили. Если "форкнуть и доработать" у меня так точно все сломается. Да и с генерацией файлов не все так просто.

@avid
Copy link

avid commented Dec 1, 2014

А я вот поддерживаю @pupkinV - я тоже об этом задумывался. Кстати, готов помочь, если решите заниматься этим.

@pupkinV
Copy link
Contributor

pupkinV commented Dec 1, 2014

@AlexeyDsov у вас в проекте код отличается от форка masterNs, это даже не вопрос), если сейчас допилить ветку в соответствии с PSR, то, либо вы обновляете этим патчем свой проект, либо мы теряем последнего мантейнера который работает с этим кодом?)
В мейнстрим и без того тяжко все вливается, а это вообще убьет фрэймворк. Стоит ли?

@AlexeyDsov
Copy link
Member Author

В текущем проекте код отличается от masterNs, кажется, всего несколькими коммитами. Допиливать masterNs до PSR0 мне кажется достаточно тяжело и весь код опять должен быть перелопачен. Сделать все в одном неймспейсе было относительно просто - нужно лишь было везде прописать namespace Onphp;
Я правда писал конвертер на неймспейсы и наверно он тут должен справится с этой проблемой но давно его не трогал и он не слишком красив кодом :)

Плюс код, генерирующий бизнес классы по PSR0 так же усложняется, т.к. сейчас он кладет все классы в один, заданный в xml namespace. В ином случае связи между классами сложнее (Proto, AutoProto, AutoBusiness и т.д.).

Возможно не сделать PSR0 было ошибочно но более легко, в том числе и для миграции проекта на неймспейсы. Т.к. автолоадер пути до классов кеширует (кладет в tmp папочку маппинг какой класс где искать), то разницы на тот момент какой из них использовать не было.

Кстати если не использовать onphp автолоадер то, думаю, не будет срабатывать по понятным причинам ClassNotFoundException. Вряд ли его кто-то использует, но факт что он должен перестанет кидаться.

@pupkinV
Copy link
Contributor

pupkinV commented Dec 2, 2014

кладет все классы в один, заданный в xml namespace

В каждом vendor своя мета и, соответствено, свой, один NS. Код точно усложнится :)

за NS:

  • NetBeans помогает даже если путь не соответствует NS. Остальные, не пробовал
  • Пдключая либу с NS мы имеем рабочий лоадер (у нас текущий заменен, отсутствие ClassNotFoundException не заметили, т.к. оно встречается всего дважды в проекте в классах\методах которые мы заведомо использовать не станем)
  • Решение уже есть и оно опробывано как минимум на одном проекте

Против:

  • Все и так лежит в плоском NS. Имя ему "". Чего мы добьемся?
  • Что мы скажем нашим детям\последователям, почему мы приняли такое решение?! Что если я закину на хабр статью "Вернитесь к нам! У нас NS!". На сколько глубже меня загонят в минус?

Мнение предвзятое, т.к. знаю что NS нужны, но ни разу не возникало конфликта имен и код с NS усложняется. Желательно бы выслушать опытных товарисчей
P.S. я бы переработал до PSR-4 (прошу прощения за неверную ссылку, хотя ничего не меняет) если решим переходить на NS

@AlexeyDsov
Copy link
Member Author

В каждом vendor своя мета и, соответствено, свой, один NS. Код точно усложнится :)

По текущей реализации - основной код в неймспейсе проекта по PSR0/PSR4 в папочке src. Entities в папочку Entities в линейном неймспейсе \MyProject\Entities.

ClassNotFoundException бросает автолоадер когда не находит какой-то класс. Он так всегда работал до переписывания и после я это сохранил.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants