html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

«Плавающий интерфейс», или как упорядочить разработку frontend + backend

Без лишних дифирамбов перейдем к сути.

Каждый из тех, кто когда либо в своей жизни делал сайт сложнее домашней странички своего кота, знает не понаслышке о проблеме передачи требований от фронтенд разработчиков к бекенд программистам. Много было пролито крови и сорвано сроков из-за этого. Вспомните, как было хорошо раньше, когда один человек мог сверстать простенький 3х колоночный шаблон и запрограммировать серверную часть.

О времена, О нравы. © Цицерон

Но сейчас совершенно другое время, и совершенно другие требования. Соответственно на проект приходится подключать несколько фронтенд и бекенд разработчиков. Как обычно выглядит шаблон ленты новостей, пока самого механизма новостей, или способа взаимодействия с ним нет:
<?
$news_list = array(
	array('id'=>1,'title'=>'news 1','text'=>'text'),
	array('id'=>2,'title'=>'news 2','text'=>'text'),
	array('id'=>3,'title'=>'news 3','text'=>'text'),
	// ...
);
?>
<ul class="news">
<?foreach($news_lsit as $news){ /* выводим тело анонса */ }?>
</ul>

Плюсы:
  • быстро;
  • ...
Очевидные минусы:
  • фронтендщику придется тратить время на постановку задачи\написание мануала\дерганье бекендщика;
  • нет единого механизма передачи данных (фронтендщик может запросить данные через ajax, или отрендерить их непосредственно в шаблоне);
  • после реализации функционала нужно очищать шаблон от мусора.

Идея

Намучавшись от этой вечной чехарды, в недрах нашей компании был изобретён принцип «плавающий интерфейс». Проблема заключается в том, что бы связать работу фронтенд и бекенд разработчиков в одной точке, в одном сервисе. Для этого было предложено написать бекенд разработчиком один класс (точку входа), который будет использовать фронтенд разработчик в шаблонах. А когда фронтендщику потребуется новый функционал, он напишет расширение (extends) с методом заглушкой. Которая в последствии перейдет в функционал основного класса, а из расширения будет удалена. Что-то вроде этого:
  • /app/views/шаблоны
  • /app/ext/Frontend.class.php
  • /app/ext/FrontendExtended.class.php

// /app/ext/Frontend.class.php
// функционал, который уже реализован
Class Frontend{
	public function getNewsList($limit=10){ /* реализация */ }
	public function getNewsByID($news_id){ /* реализация */ }
	public function getRelatedNewsList($news_id, $limit=4){ /* реализация */ }
}

// /app/ext/FrontendExtended.class.php
// функционал, который необходимо реализовать
Class FrontendExtended extend Frontend{
	public function getNewsByCode($news_code)
	{
		return array('id'=>33,'title'=>'news 33','text'=>'text');
	}
}

// где-то в недрах системы шорткат вызова
// класс может быть и синглтоном, если у него будут свойства-состояния
function F(){
	return new FrontendExtended();
}

Благодаря этому подходу, теперь фронтендщик может использовать уже «почти» готовую реализацию апи (вместо заглушки, что была раньше). То есть что-то вроде того:
<div class="news">
<?
// мы знаем, что так передавать параметры нельзя, это всего лишь пример
$news = F()->getNewsByCode($_GET['code']);
/* выводим тело новости */
?>
</div>

Осталось только бекенд разработчику заглянуть в файл /app/ext/FrontendExtended.class.php и реализовать методы, которые там описаны в основном файле — /app/ext/Frontend.class.php

Не сервером едины.

Т.к. у нас есть единая точка входа, мы сможем легко на основе этого класса создать Рест апи. Описывать тут не буду как это сделать, т.к. это тема для отдельной статьи.

Итоги.

Итак, благодаря такому подходу, видятся сразу несколько плюсов:
  • есть одна единственная точка взаимодействия фронтенда и бекенда;
  • легко расширять новым функционалом;
  • легко покрывать тестами;
  • легко передать весь функционал куда угодно (ajax json, функция шаблонизатора, напрямую из кода шаблона);
  • сокращается время передачи требований бекенд разработчику;
  • ИМХО нагляднее и понятнее чем просто переданные в шаблон параметры.

Минусы:
  • Фронтендщик должен знать хотя бы минимально серверный язык;
  • ...?

Призываю сообщество обсудить эту идею. Критика приветствуется, это всего лишь концепт. И да, если такая практика уже существует, хотелось бы почитать что-нибудь по этому поводу.

С уважением, Роман.
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с phptime.ru

1

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • revin.roman
          • домен phptime.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции