Изменение наименований классов в движке

В LiveStreet произошел рефакторинг формы наименований классов. Данное предложение высказывалось avadim'ом еще на LS-party и теперь реализовано.

Новые формы:
  • модуль — Module[имя модуля]
  • маппер — Module[имя модуля]_Mapper[имя маппера]
  • сущность — Module[имя модуля]_Entity[имя сущности]

Для плагинов добавляется префикс Plugin[имя плагина]_, например, Plugin[имя плагина]_Module[имя модуля]_Entity[имя сущности].

Подключение маппера теперь происходит автоматически при вызове метода Engine::GetMapper() в модуле:
Engine::GetMapper(__CLASS__) — вернет маппер совпадающий с именем модуля
Engine::GetMapper(__CLASS__,'Test') — вернет маппер Test

Такой подход позволит навести порядок и логику в названия классов.

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

39 комментариев

avatar
если честно, уже ничего не понимаю.
и на какую версию уже оглядываться? Только занялся переходом на 0,4 с учетом доработки всего — теперь получается она уже не актуальна?
avatar
Чтобы не было путаницы, предлагаю этой версии ЛС присвоить номер 0.4.1 (разумеется, это должно быть в LS_VERSION).
avatar
Поддерживаю, я бы предложил и в будущем использовать промежуточные релизы.
Очень утомительно ждать по году новых релизов, понято что есть svn, но я так понимаю ЛС уже нечто серьезнее.
avatar
т.е. обратной совместимости не будет?
avatar
так и совмещать то особо нечего, меняются только названия классов. Вызовы методов модулей, сущностей и т.п. остается прежним.
avatar
Макс, обьясни дураку об изменениях по системе «было — стало» на примере какого нибудь простенького модуля )
avatar
было:

<?
class LsUser extends Module {
	
}


class UserEntity_Country extends Entity {    
  
}

class Mapper_User extends Mapper {
	
}



class PluginPage_Page extends Module {
	
}

class PluginPage_PageEntity_Page extends Entity {
	
}

class PluginPage_Mapper_Page extends Mapper {
	
}
?>

стало:

<?
class ModuleUser extends Module {
	
}

class ModuleUser_EntityCountry extends Entity {    
  
}

class ModuleUser_MapperUser extends Mapper {
	
}



class PluginPage_ModulePage extends Module {
	
}

class PluginPage_ModulePage_EntityPage extends Entity {
	
}

class PluginPage_ModulePage_MapperPage extends Mapper {
	
}
?>
avatar
я так никогда на 0.4 не перейду…
avatar
— 30 марта начала продаж iPad
— после iPad Party, 30 мая С.Джобс анонсирует прошивку, в которой написано «На iPad будут работать только те программы, которые начинаются с префикса iPad_» :)
avatar
увы надо перетерпеть эти переходы иначе дальше вопросов «ой а у меня плагины конфликтуют» будет на порядок больше.
avatar
странно, что это реализовано только сейчас
avatar
Стоило наверное назвать версию с такими изменениями как минимум 0.4.1.
avatar
Когда будет нормальная документация для разработчиков?
avatar
очень жаль что мой вопрос игнорируют…
avatar
может действительно стоит выпустить релиз 0.4.1 и подготавливаемые плагины «подгонять» под него? Если сейчас, они как раз «подгоняются» — зачем это делать дважды?
Мне кажется, если бы была задумка оставить это нововведение на 0,5 версию — зачем было сейчас ее так афишировать?
avatar
в свн загляните ;)
avatar
Давно надо было это сделать
avatar
Семь раз отмерь, один отреж
Вот это как раз про Вас :)
Порядок наводите после выхода релиза… Вам-то порядок, а вот все, кто использует продукт — чувствуют дисбалансы. Не говорю уже о тех, кто пишет плагины, переписывать 3ий раз мне бы уже не хотелось.

Плохо, ребята!
avatar
Это нормальный процесс развития системы, новые версии с изменениями и доработками будут появляться постоянно. Не хотите изменений — откатитесь на версию 0.3, либо ждите релиза 1.0
avatar
либо ждите релиза 1.0
очень тонкий сарказм! или есть конкретные планы?
avatar
Значит те, кто уже перешел на 0.4 версию попали в ступор, плагины новые писаться под неё как я понимаю уже не будут, после указанных изменений в классах? Мда… снова обновляться ((
avatar
Если не будет выпущено версии 0.4.1, то будут писаться именно под 0.4 (скажу, пожалуй, только за себя, но мне кажется это разумным), для самого же разработчика оставить старую логику удобнее. Ну а если у клиента будет свн версия, то там и не так уж много исправить под новые наименования. Работы по переделке мода на 3-5 мин, не как с 0.31 => 0.4.
avatar
Ну я из содержания топика и комментариев сделал вывод, что будет выпущен очередной релиз, тока пока не решили каким он будет. В силу этого, никто не станет уже писать плагины под 0.4, а многие уже перешли на 0.4. Я говорю как пользователь, не как разработчик.
avatar
Версия 0.4.1 появится в течении 10 дней, не нужно паники.
Портировать плагин с 0.4 на 0.4.1 потребует не больше 10 минут, никакой функционал менять/дорабатывать не придется.

Получается, кстати, довольно интересно. Если новую версию долго не выпускать — все кричат и требуют её, а если выпустить новую через месяц — все опять кричат.
avatar
а это как с премией, лучше по чуть чуть раз в квартал, чем в конце года все и пропить большую часть на новогодние праздники )
avatar
а мне лично наоборот,
1 раз в год — Стабильнее(практичнее)(а то как сегодня..), не нужно думать что через 3 месяца — «все по-новой». У кого-то переделок название в шапке поменять, а кого-то заказанные «самописные» модули переделать.

Ты(орт) у нас «жираф» — тебе виднее, «заведи одну политику и веди ее», «прыгать в стороны — всем получается — неудобно». имхо
avatar
Если новую версию долго не выпускать — все кричат и требуют её, а если выпустить новую через месяц — все опять кричат.
Кричали и требовали в первую очередь не абстрактных цифр 04, но архитектурных и функциональных изменений, следующей ступени в эволюции движка.

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

Тут уж из опасений внезапных изменений поневоле задумаешься, нужно ли начинать что-то делать, либо для надёжности подождать ещё немного, чтобы не пожинать потом плоды несовместимости.
avatar
На мой взгляд, эти изменения, может, немного запоздалые, но совершенно необходимые. Я понимаю некоторое недовольство, но это как больной зуб, который, вроде, и не особо мешает жить, но рано или поздно им приходится заняться.

Теперь именования классов получают четкую и внятную систему именований. Не знаю, как у других разработчиков, но у меня ни разу не получилось написать имя класса сущности (entity) с первого захода. Поэтому я для себя давно уже решил, что надо упорядочить это безобразие, и если глянете сущности и мапперы админпанели, то увидите уже сейчас там такие имена классов: PluginAceadminpanel_ModuleAdmin_EntityUser или PluginAceadminpanel_ModuleAdmin_MapperAdmin. :) Рад, что Максим прислушался к моим советам.

Проблем с адаптацией плагинов я вообще не вижу. Тут Макс прав — просто немного имена классов изменить. Любые самописные, заказные, тиражируемые — абсолютно любые модули портируются на счет раз.

Например, был у нас класс PluginPage_Page, т.к. это модуль, то переименовываем его в PluginPage_ModulePage. И запускаем в ТоталКоммандоре поиск строки PluginPage_Page во всех php-файлах. Везде, где нашли, меняем эту строку на PluginPage_ModulePage. Делаем такую же замену для сущности (меняем PluginPage_PageEntity_Page на PluginPage_ModulePage_EntityPage) и для маппера (меняем PluginPage_Mapper_Page на PluginPage_ModulePage_MapperPage). Все! Вот мы целый плагин адаптирвали под новую версию! Больше не нужно ни-че-го! Трудно? Долго? Страшно?

ЗЫ Я плагин Page только для примера привел, на самом деле там уже все изменено.
avatar
и что теперь всем пользователям надо из SVN качать, а не релиз? зачем тогда вообще релиз? :)
avatar
а, сорри, не заметил про 0.4.1 :)
avatar
Товарищи, извините, что здесь задаю возможно очень ламерский вопрос, но где описывается метод User_GetUserCurrent()? Нашел только GetUserCurrent в user.class.php, но откуда взялось User_, не понимаю, хотя искал. Вроде и не имя файла и не системный метод.
avatar
Лишь два одиноких минуса были мне ответом…
avatar
User_GetUserCurrent() => модуль User метод GetUserCurrent()
avatar
Большое спасибо за ответ! Ну да, я это видел, но не понимал, как он вызывается, теперь увидел/понял, что там перегружен __call. Еще раз извиняюсь — я только знакомлюсь с современным CMS'остроительством.
avatar
Спасибо, наименования теперь гораздо логичнее выглядят, чем раньше.
Переделал свои плагины под 4.1, но столкнулся с тем, что Engine::GetEntity() имеет прежний синтаксис для сущностей в плагинах, т.е. например Engine::GetEntity(«PluginTest_Test_Something») — работает, а Engine::GetEntity(«PluginTest_ModuleTest_EntitySomething») — казалось бы используется полное имя класса, но данный вариант не предусмотрен в движке… В будущем надеюсь будет возможность указывать класс сущности в полном формате, для порядка, так сказать :)
avatar
извиняюсь, не выделил куски кода в code, и ковычки заменились на «»
avatar
Я задавал подобный вопрос, но ort сказал, что сделано именно так, как и задумано
avatar
не сделано как задумано, а оставлено «как есть» на текущей версии, чтобы минимизировать затраты на переход с 0.4 -> 0.4.1. В след версиях будут работать оба варианта, далее возможен отказ от первого.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.