ravlio
Новичок
Каким боком вы справляетесь с конвертацией underscore в camelCase? Вот пример. PHP-ORM-объект, у которого свойства — это поля БД:
Всё хорошо. Но вот только у БД стандарт — это underscore. Соответственно, писать в БД надо firstName=>first_name, lastName=>last_name. А читать наоборот — firstName<=first_name, lastName<=last_name
Окей, я сделаю мэппинг, это не такая уж и проблема, хотя я люблю мэджик методы и не пользуюсь геттерами и сеттерами. Но что не сделаешь ради рефакторинга собственного фреймворка ради стандартов.
Но идём дальше. HTML и именование полей, которое также идёт underscore.
Как быть здесь? Также конвертировать имена входящих полей в camelCase? А если имена полей заранее неизвестны? Бывает и такое.
Теперь берём JavaScript. Вроде как тоже всё должно быть camelCase? Но давайте поработаем хотя бы с формой выше. Заполним её, подгрузив данные юзера через ajax. Там они будут в camelCase:
{firstName:'Илья',lastName:'Петров'}
Если не знать, что first_name=firstName, то неизвестно, какое значение куда вставлять. Нужно делать специальные таблицы соответствий или парсить имена переменных. В любом случае, всё приходится пускать через какую-то прокладку.
И наоборот, давайте обработаем форму через JavaScript. К примеру, так:
(не смотрите, что так топорно, это лишь для примера).
Ну и что это за белиберда получилась? Это мне надо предусмотреть, чтобы serializeObject также делал мэппинг underscore<->camelCase? Ну вот примерно так:
Я ещё не проверял, но очень надеюсь, что в каждом языке есть возможность прочитать у переменной её имя собственное, чтобы понять, underscore она или нет и сконвертить её. Иначе придётся задавать фиксированные таблицы для всех переменных, а это вообще дурдом.
И это ещё не самый страшный пример. Есть следовать этим стандартам, то есть просто нерешаемые задачи. И когда соединяются DB, PHP, HTML и JS, то получается очень весело, нужно постоянно следить за подобными конверсиями.
И вот я читаю сейчас, тот же Yii рекомендует в PHP именоваться camelCase, в DB — underscore. При этом никаких бехиверов и мепперов для удобной работы из коробки не предоставляет.
Кто как решает проблему? Я решил просто: у меня изначально вообще всё в underscore, в том числе имена классов и файлов. И я горя не знаю, есть только проблемы с autoload. Но сейчас надо отдавать проект команде, а ведь все пишут в этом camelCase. Очень хочется следовать всем PSR, W3C и прочим стандартам, но я привёл конкретные примеры, которые ничего кроме головной боли и потери кучи времени не доставляют.
Код:
$user->firstName='Илья';
$user->lastName='Петров';
$user->update()
Окей, я сделаю мэппинг, это не такая уж и проблема, хотя я люблю мэджик методы и не пользуюсь геттерами и сеттерами. Но что не сделаешь ради рефакторинга собственного фреймворка ради стандартов.
Но идём дальше. HTML и именование полей, которое также идёт underscore.
HTML:
<form action="/user/update">
<input name="first_name" id="first_name" value="{$user.firstName}">
<input name="last_name" id="last_name" value="{$user.lastName}">
</form>
Теперь берём JavaScript. Вроде как тоже всё должно быть camelCase? Но давайте поработаем хотя бы с формой выше. Заполним её, подгрузив данные юзера через ajax. Там они будут в camelCase:
{firstName:'Илья',lastName:'Петров'}
Если не знать, что first_name=firstName, то неизвестно, какое значение куда вставлять. Нужно делать специальные таблицы соответствий или парсить имена переменных. В любом случае, всё приходится пускать через какую-то прокладку.
И наоборот, давайте обработаем форму через JavaScript. К примеру, так:
Код:
$.extend(this,$("form").serializeObject()); // Конвертируем элементы формы в объект
this.homeAddress='Московский пр., 31'; // Добавляем ещё одно свойство
console.log(this);
{first_name:'Илья',last_name:'Петров',homeAddress:'Московский пр., 31'} // Получаем смесь underscore и camelCase
Ну и что это за белиберда получилась? Это мне надо предусмотреть, чтобы serializeObject также делал мэппинг underscore<->camelCase? Ну вот примерно так:
Код:
for (var name in this)
{
$("#"+some_clever_mapper(name)).val(this[name]); // вместо $("#"+name).val(this[name]);
}
И это ещё не самый страшный пример. Есть следовать этим стандартам, то есть просто нерешаемые задачи. И когда соединяются DB, PHP, HTML и JS, то получается очень весело, нужно постоянно следить за подобными конверсиями.
И вот я читаю сейчас, тот же Yii рекомендует в PHP именоваться camelCase, в DB — underscore. При этом никаких бехиверов и мепперов для удобной работы из коробки не предоставляет.
Кто как решает проблему? Я решил просто: у меня изначально вообще всё в underscore, в том числе имена классов и файлов. И я горя не знаю, есть только проблемы с autoload. Но сейчас надо отдавать проект команде, а ведь все пишут в этом camelCase. Очень хочется следовать всем PSR, W3C и прочим стандартам, но я привёл конкретные примеры, которые ничего кроме головной боли и потери кучи времени не доставляют.