bayrell / BayLang

BayLang compiler source code
https://bayrell.org/ru/docs/baylang
Apache License 2.0
4 stars 0 forks source link

Добавить DTO #176

Open ildar-ceo opened 3 weeks ago

ildar-ceo commented 3 weeks ago

Пример

data UserDTO
{
    string name;
    string lastname;
    string email;
    string login;
}

/**
 * Returns name
 */
string getName(UserDTO user)
{
    return user.name;
}

Выдает код

funtion getName(user)
{
    return user.name;
}

Выдает код PHP

funtion getName($user)
{
    return $user["name"];
}

Смысл data в том, чтобы структурировать JSON объекты, которые передаются между backend и frontend. Структурировать можно по разному. Можно через классы и модели, но тогда код модели нужно передавать на backend и frontend. А это приводит к увеличению bundle.

Ключевое слово data декларирует структуру только для компилятора, чтобы он смог проверить код на наличие ошибок. Информация о самой структуре не передается в исполняемый файл. Поэтому он не увеличивается. Также data не содержит функций.

ildar-ceo commented 3 weeks ago

Единственное, как добавлять новые поля в data из других модулей. Например, есть UserDTO и мы хотим разработать модуль партнерской программы PartnerPlugin. Этот модуль должен добавить в таблицу users новое поле partner_id - ID партнера, которые зарегистрировал данного пользователя. UserDTO объявлен в плагине UsersPlugin. И как PartnerPlugin должен внести изменения в структуру базы данных и в DTO объекты?