У меня есть приложение AngularJs, которое подключается к базе данных, используя API-интерфейсы php PDO.
Это схема потока данных:
DB:
CREATE TABLE person (
...
first_name,
...
);
php API:
$stmt = $this->db->prepare("SELECT * FROM person");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
...
'first_name' => 'Alice',
...
angular service:
getPerson: function (id) {
return $http({
method: 'GET',
url: apiUri + 'get' + '/' + id,
}).then(handleSuccess, handleError);
},
angular controller:
Person.getPerson(id).then(function(person) {
var name = person.first_name; // this throws a jslint warning
});
Проблема в том, что рекомендуемый стандарт именования SQL — underscore_case, а Angular — camelCase …
Я не хотел бы отключать jslint, что очень полезно, в других отношениях …
Я знаю, что мог избежать предупреждений даже с
{
"camelcase": false
}
в .jshintrc, но я бы предпочел не отключать проверку верблюдов в глобальном масштабе …
В настоящее время я избегаю предупреждений jslint с помощью комментариев jslint следующим образом:
/* jshint camelcase: false */
var name = person.first_name;
/* jshint camelcase: true */
но мой код будет содержать больше комментариев jslint, чем код … Довольно нечитабельно …
Как вы (или вы) решить эту проблему?
Поскольку underscore_case не является обязательным для SQL, а camelCase является обязательным для Angular, можно использовать имена, подходящие для обеих сред. В этом случае camelCase приемлем с обоими.
За 40 с лишним лет программирования я никогда не думал, что underscore_case полезен. Я всегда предпочитал CamelCase. Переименуйте first_name в firstName, оно не только выглядит лучше, но и решит проблему.
РЕДАКТИРОВАТЬ
Имена столбцов в стандартном SQL могут состоять из букв, подчеркиваний и
цифры начинающиеся с буквы. SQL позволяет использовать пробелы, зарезервированные слова и специальные символы в имени, если вы заключаете их в двойные кавычки.
Идентификаторы должны быть не только значимыми, но и уникальными. Таким образом, при выборе соглашения об именовании необходимо учитывать среду, в которой работает
Windows
SQL не зависит от регистра, т. Е. NAME == name == Name == NaMe
Юникс
SQL чувствителен к регистру, т. Е. NAME! = Name! = Name! = NaMe
Майкл Лато рекомендует PascalCase для MS Server,
Oracle использует UPPER с подчеркиванием.
MySQL рекомендует ниже с подчеркиванием, НО это не обязательно Увидеть
НОТА
В Windows InnoDB всегда хранит имена баз данных и таблиц внутри нижнего регистра
Используйте объект, как если бы вы использовали массив: person['first_name']