Шаблон програмування CSN-Ajax

Ідея дуже проста, але дає значні переваги, порівняно з кодом без застосування даного шаблону, має потенціал активно застосовуватися. Дивно, але я не зустрічав нічого подібного в будь-якому трендовому коді для повторного використання, тому назвав шаблон «CSN-Ajax» виходячи з назви сайту і проекту «SKY Framewok», в якому шаблон вперше з'явився — CoreSky.Net, в моєму проекті. Приклад реалізації я опишу тут на основі застосування PHP, jQuery і MVC патерну. Отже, коротко, без коментарів:

1. Робимо в javascript функцію-обгортку з ім'ям ajax(action, postfields, func, controller) для $.post(..). Типовий виклик в коді програми:

ajax('edit', post_vars, function(data) {
/ / ....
})

2. Крім «огортання» коду jQuery $.post(..), функція робить ще дещо. Параметр controller в коді програми часто пропущено, як у прикладі вище, його функція бере з «document.location.href, в загальному випадку распарсивая його значення, але часто це просто перший ключ рядка запиту (query string, GET запит). Тобто якщо controller не вказано, то треба відіслати запит «свій» котроллер, це частий випадок.

3. Вважаємо що веб додаток має єдину точку входу, як часто і є. Функція ajax(..) конструює GET частину запиту сформувавши «controller» і ще додає першим ключем-значенням "__AJAX__=_"

4. В index.php спочатку файлу написаний такий код:

<?php
if ('__AJAX__' == key($_GET)) {
define('AJAX', true);
array_shift($_GET);
} else {
define('AJAX', 'false');
}

Тобто якщо була використана функція javascript, ajax(..), бекенд «знає», що відбувається ajax запит, фреймворк це враховує в своїй роботі, що скорочує код програми і спрощує роботу з ним. А, саме: це дає можливість, за замовчуванням відключити layout і style додатка, що відповідає найбільш частого нагоди. В той час, як для звичайних запитів, фреймворк підключає за замовчуванням деякі layout і style.

5. маємо на Увазі, що фреймворк підмінив error handler php за допомогою функції PHP set_error_handler(..), аналогічно можна працювати з Exception. У випадку помилок при запитах AJAX, бекенд, замість необхідного виводу в браузер, видає JSON дані, де додається ключ «catch_error», наприклад:

echo json_encode(['catch_error' => "$this->errors<h1>Stdout</h1>" . html($stdout)]);

Звичайно, підміна виводу в браузер можлива, коли використовується буферизація STDOUT з допомогою функції PHP ob_start(). Якщо функція ajax(..), детектировала, що є JSON дані з ключем «catch_error», вона показує, наприклад, спливаюче вікно з помилками. Природно, подання з помилками повинен працювати тільки в режимі налагодження програми.

Реалізація описаного вище шаблону CSN-Ajax, може змінюватись по-різному, але в загальному переваги, які можна отримати:

а) Більш короткий синтаксис ajax викликів на javascript, прив'язка до контролера відносна до відкритої сторінці.
б) Більш короткий синтаксис обробки ajax викликів в контролерах, не потрібно спеціально відключати layout.
в) Є автоматична нотифікація розробника про помилки при запитах ajax.

Взагалі, одна з задач хорошого Framework, — працювати як архіватор, часто використовуваний код, повинен представлятися коротким синтаксисом, що чудово відображено в цьому шаблоні.

Спасибі за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.