Англійська для розробників Diesel (Rust)

Learn the English vocabulary for Diesel: compile-time query checking, the schema DSL, and explaining a type-safe Rust ORM to a team.

Дизельні розмови, як правило, зосереджені на компромісі між його гарантіями безпеки під час компіляції і його більшою кривою навчання в порівнянні з більш динамічними ORM, тому словник включає схему DSL, конструктор запитів і міграції, які роблять недійсні запити неможливими для компіляції, а не неможливими під час виконання.

Ключовий словник

** Перевірка запиту під час компіляції ** — визначальна властивість Diesel, коли запит, що посилається на неіснуючу колонку або несумісний тип, не компілюється, а створює помилку SQL під час виконання. “З перевіркою запиту під час компіляції, ця помилка в назві стовпчика ніколи б не була відправлена — сама збірка зазнала б невдачі ще до того, як ми запустили тести.”

** Schema DSL ** — сформовано представлення вашої схеми бази даних у мові Rust (зазвичай, створено за допомогою diesel print-schema ), яке буде використано конструктором запиту для перевірки того, чи посилаються запиту на справжні таблиці і стовпчики з відповідними типами. “Не редагуйте файл схеми DSL вручну — його створено з фактичної структури бази даних, тому відтворіть його після виконання перенесення.”

** Конструкція запитів ** — плавний API Diesel з перевіркою типів для побудови SQL- запитів у Rust, складання фільтрів, з’ єднань і вибору, поки компілятор перевіряє отримані типи.

  • “Збудувати цей фільтр за допомогою конструктора запитів замість необробленого рядка SQL — тоді зміна схеми, яка вилучає цей стовпчик, призведе до переривання компіляції замість тихого завершення роботи у виробництві.” *

** Migration ** — версійна, впорядкована зміна SQL у схемі бази даних, що виконується за допомогою CLI Diesel, який також відновлює схему DSL, щоб код Rust і фактична база даних залишалися синхронними.

  • “Запишіть це як міграцію, а не змінюйте таблицю вручну — таким чином схема DSL буде оновлена автоматично, а локальні бази даних всіх користувачів залишаться послідовними.” *

** Асоціації ** — Механізм Diesel для виразування відносин між таблицями (наприклад, належить- до або має- багато) у типах Rust, що дозволяє перевіряти типові з’ єднання замість вручну написаного з’ єднання SQL.

  • “Встановіть асоціацію між цими двома структурами — тоді конструктор запиту зможе виразити об’ єднання безпосередньо, замість того, щоб нам доводилося писати необроблене об’ єднання SQL і відображати результат вручну.” *

Звичайні фрази

  • Чи могла б перевірка запиту під час компіляції виявити це, або це проблема, яку система типів справді не може виявити?»
  • Чи ми відновили схему DSL після цієї міграції, чи це тому, що збірка не бачить нову колонку?
  • Чи варто це будувати з конструктором запитів, чи є сирий SQL дійсно необхідним тут?»
  • Чи це з’єднання виражено через асоціацію, чи це все ще написано від руки?»

Приклади висловлювань

Пояснення до огляду на випускний інцидент: “Це не могло статися з перевіркою запитів під час компіляції — стовпчик, який ми вилучили, все ще був вказаний в сирому рядку SQL, який Diesel не міг перевірити.”

Перегляд міграції:

  • “Не забудьте відновити схему DSL після завершення перенесення, інакше збирання все одно вважатиме, що існує старий стовпчик.” *

Пояснення рефактору:

  • “Ми замінили це написане від руки з’ єднання асоціацією — конструктор запиту тепер намагається, щоб обидві сторони зв’ язку відповідали одне одному під час компіляції.” *

Професійні поради

  • Провід з ** перевіркою запитів у часі компіляції ** при обґрунтуванні кривої навчання Diesel для команди, яка використовує динамічні ORM - це безпосередньо запобігає цілому класу виробничих SQL-вад.
  • Нагадування співробітникам що ** схема DSL ** створюється, а не написана від руки — редагування її вручну є поширеною помилкою на початку, яку буде беззвучно перезаписано.
  • Віддавайте перевагу ** конструктору запитів ** перед необробленими рядками SQL, де це можливо, оскільки необроблені рядки обходять гарантії часу компіляції, які є головною перевагою Diesel.
  • Моделювати відносини через ** асоціації **, а не вручну з’єднання — це зберігає систему типів, що беруть участь у перевірці правильності запиту.

Практичні вправи

  1. Пояснити, що перевірка запиту під час компіляції виявляє, що типова перевірка ORM під час виконання пропускає.
  2. Описує, чому схему DSL ніколи не слід редагувати вручну.
  3. Напишіть речення, у якому поясните співробітнику команди, чому необроблене з’ єднання SQL слід замінити на асоціацію.

«Перехідний період» (англ. Transition Period) — «Перехідний період» (англ. Transition Period)

Основна проблема полягає не просто в розумінні * того, що * потрібно виправити в коді; це навігація по складному потоку зворотнього зв’язку між розробниками. Часто те, що представлено як простий запит - “виправити цю помилку” - маскує глибшу потребу в поясненні і контексті. Розробники, які не є Rust, особливо, можуть боротися з точністю, що вимагає система типів Diesel і перевірка запитів під час компіляції. Мета змінюється від простого виправлення синтаксису до спільного створення надійної і зрозумілої схеми. Навчання, як ефективно сформулювати ці потреби англійською мовою, має вирішальне значення, рухаючись за межі функціональних описів до точних технічних запитів, які мінімізують неоднозначність. Розглянемо різницю між словами «Це не працює» проти «Поле user_id в таблиці users не має обмеження на свій тип — це може бути ціле число або рядок. Нам потрібно запровадити UUID для цілісності даних. ” Остання є набагато більш дієвою і демонструє глибше розуміння потенційної проблеми.

Крім того, пояснення схеми Diesel DSL - по суті, створення чіткої розповіді навколо відносин баз даних - вимагає обережного формулювання. Замість того, щоб просто сказати «Запит не оптимальний», ви можете сказати: «Ми можемо поліпшити продуктивність, використовуючи індекс у стовпці name в таблиці products, оскільки це часто використовується в наших найпоширеніших запитах». Цей підхід підкреслює * чому * зміна є корисною, включаючи обґрунтування, що виходить за рамки технічних деталей. Пам’ ятайте, що документація, повідомлення про верифікацію і навіть гілки Slack — це всі можливості для вдосконалення вашої англійської мови і сприяння ясному спілкуванню. При обговоренні потенційних змін схеми, зосередження на впливі - “Ця модифікація зменшить навантаження бази даних приблизно на 15%” - має більшу вагу, ніж чисто описове твердження. Навчання формувати технічні рішення в бізнес-або операційному контексті є ключем до отримання покупки від зацікавлених сторін.

Поширеною пасткою є розгляд помилок під час компіляції як виключно проблем, які * слід виправити *. Вони, насправді, є можливостями для освіти і проактивного дизайну. Замість простої відповіді «Помилка: невідповідність типу», більш продуктивним підходом буде: «Компілятор позначає це, тому що поле id в таблиці orders в даний час визначено як i32, але ми використовуємо UUID в нашій програмі. Давайте переглянемо схему, щоб забезпечити послідовність і виключити потенційні майбутні проблеми.” Це переформатування перетворює сприйняту перешкоду на можливість для поліпшення, демонструючи ваше розуміння сильних сторін Diesel.

Ось простий приклад, який показує, як використовувати diesel для створення таблиці з обмеженням:

use diesel::prelude::*;
use diesel_derive_query::{Queryable}; // Import Queryable derive macro

#[derive(Queryable, Debug)]
struct User {
    id: i32,
    name: String,
}


// This example demonstrates defining a table with a constraint on the 'email' field.
fn create_users_table() -> Result<(), DieselError> {
    let db = establish_connection();

    Schema::create_table("users")?
        .add_column(Id::new(), SqlType::Int()) // Assuming id is an integer
        .add_column(String::from("name"), SqlType::Text().with_length(100))
        .add_column(String::from("email"), SqlType::Text().with_length(255).constrained((true, /* Allow Nulls */false))); // Constrained email field

    Ok(())
}

Метод constrained надає вам змогу вказати, що стовпчик має мати певний тип і не може бути нульовим. Це важлива концепція для забезпечення цілісності даних у вашій схемі бази даних — щось, що легко пропустити без точної англійської термінології. Освоєння цих нюансів перетворить вашу здатність ефективно співпрацювати над проектами Diesel.

Поширені запитання

Про що ця стаття "Англійська для розробників Diesel (Rust)"?

Learn the English vocabulary for Diesel: compile-time query checking, the schema DSL, and explaining a type-safe Rust ORM to a team.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська для розробників Diesel (Rust)"?

Приблизно 6 min.