domino
domino Копипаст
08 марта 2018, 12:13

[Алготрейдинг 1 из n..] Введение в архитектуру и паттерны программирования.

[Алготрейдинг 1 из n..] Введение в архитектуру и паттерны программирования.



Введение

Прежде чем заняться разработкой собственного проекта на основе каркаса приложения Laravel, нам неплохо было бы понять архитектуру каркаса приложения. Некоторые могут спросить: Зачем это нужно? Смысл забивать себе голову разной теоретической чепухой?
Постараюсь ответить на этот вопрос примером из жизни:

Представьте себе, что вы хотите иметь эксклюзивный автомобиль. Естественно он будет строиться на базе некоей серийной модели, но для того, чтобы его построить вам потребуется помощь людей, которые умеют это делать. Вы решаете обратиться к мастерам или даже к фирмам, у которых есть все необходимое: знания, опыт, оборудование и инструмент, но их услуги не дешевы, Ваш бюджет просто не выдержит таких расходов. Тогда вы решаете, что будете строить автомобиль самостоятельно. Отличное решение — правда, вы берете в руки инструмент, плюете на изучение теории, внедряете свои задумки и в итоге…

Я думаю, не стоит описывать, что у вас получится в итоге, ясно только одно — ничего хорошего.

Ну и более приближенный к теме Laravel 4 ответ: Понимание архитектуры приложения, знание основ паттернов (шаблонов) проектирования, помогут вам понять, почему следует использовать именно этот каркас web-приложения, оценить его слабые и сильные стороны. Так же вы получите ответ, почему так сильно изменился Laravel 4 по сравнению с Laravel 3.

Для тех, кто все же решил изучить теорию, прежде чем приступить к практике, советую: запаситесь терпением.

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

Определения

  • Архитектура приложения — это логическая структура, описывающая отдельные компоненты, их свойства и связи в виде единой системы.
  • Паттерны — это описания схем детализации отдельных подсистем приложения и взаимосвязей между ними. При этом паттерны не являются частью программы, не влияют прямо на ее структуру и сохраняют полную независимость от языка программирования конкретной системы.
  • MVC — программная парадигма архитектурных паттернов: модель — представление — контроллер.

 

Паттерны это не так сложно как кажется 

Если Вы спокойно и уверенно ориентируетесь в паттернах и парадигмах, то смело можете пропускать эту часть статьи. Но если, читая определения, Вы чувствуете, что это просто набор слов, то не поленитесь прочитать представленный ниже материал. Я надеюсь, он поможет вам разобраться в этой не очень простой для многих программистов теме и начать использовать паттерны в своей работе.

На самом деле паттерны не так сложны для понимания, как кажется на первый взгляд. Давайте проиллюстрируем их примерами, все сразу станет намного понятнее.

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

  1. Вася и Петя встретились.
  2. Вася протянул Пете руку.
  3. Петя сказал «Здравствуй Вася».
  4. Вася ответил «Здравствуй Петя».
  5. Вася спросил «Ты принес мне диск с курсовой?».
  6. Петя ответил «Да, принес».
  7. Вася полез в карман и достал деньги.
  8. Вася отсчитал 100$.
  9. Вася передал деньги Пете.
  10. Петя принял деньги от Васи.
  11. Петя пересчитал деньги.
  12. Петя кивнул головой — подтверждая, что сумма соответствует цене за диск.
  13. Петя положил деньги в карман.
  14. Петя достал диск.
  15. Петя передал диск Васе.
  16. Вася принял диск от Пети.
  17. Вася положил диск в карман.

Теперь разобьём эту программу на отдельные части:

  1. Начало программы.
  2. Встреча.
  3. Обмен приветствиями.
  4. Проверка наличия «данных».
  5. Передача данных «деньги».
  6. Списание данных «деньги».
  7. Проверка данных «деньги».
  8. Запись данных «деньги».
  9. Передача данных «диск».
  10. Списание данных «диск».
  11. Запись данных «диск».
  12. Конец программы.

У нас получился алгоритм действий для встречи и обмена диска на деньги между двумя индивидуумами.

Теперь разбиваем алгоритм на составляющие так:

  1. Общение.
  2. Обмен данными.
  3. Проверка условий.
  4. Действия.

У нас как раз и получился набор паттернов (правда очень абстрактный). Зато этот архитектурный паттерн или программная парадигма описывает обмен данными практически любого вида и любой сложности. По сути это аналог всем известного MVC.

Если же мы решим разработать универсальную программу для взаимодействия двух человек, то нам будет недостаточно такого куцего описания. Точнее нам к архитектурному паттерну понадобиться добавить паттерны, которые расширят описание реализации взаимодействия всех частей архитектурного паттерна.

Давайте попробуем составить схему таких паттернов самостоятельно:

  1. Общение
    1. Установление контакта
    2. Передача запросов между пользователем и системой
  2. Обмен данными
    1. Передача данных запроса в направлении в систему
    2. Передача данных запроса в направлении из системы
    3. Передача команд на проверку условий
    4. Передача команд на передачу данных
  3. Проверка условий
    1. Проверка условий передачи данных
    2. Подтверждение проверки условий
  4. Действия
    1. Извлечение данных из хранилища «А»
    2. Передача данных в хранилище «А»

В итоге у нас получилась своя схема паттернов.

Теперь, если мы опишем, как конкретно взаимодействуют наши паттерны между собой — то получим рабочие паттерны. Причем паттерны будут достаточно универсальными, чтобы на их основе писать приложения не только для общения людей, но и для общения инопланетян.

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

Паттерны бывают разными

Давайте теперь немного углубим наши знания. Дело в том, что паттерны бывают не только архитектурными, на самом деле у паттернов есть несколько классификаций.

  • Классификация по масштабу
  • Классификация по стилю
  • Классификация по применению

Классификация по масштабу

Самая часто используемая классификация — это классификация по масштабу. Чаще всего она применяется для паттернов проектирования и делится на три слоя по детализации:

  • Архитектурные паттерны — наивысший слой детализации, используются для описания структуры программы в целом.
  • Паттерны проектирования — средний слой детализации, описывают компоненты отдельных архитектурных паттернов и реализацию их взаимодействия.
  • Идиомы — низший слой детализации, описывают реализацию отдельных решений проблем применительно к конкретному языку программирования. Следует учитывать, что зачастую идиомы для различных языков программирования имеют различную реализацию, или не имеют таковой вовсе. Примером могут служить указатели в памяти для реализации в Assembler, они имеют абсолютно другую реализацию в Си и не имеют реализации в С#, так как там проблема с утечкой памяти не существует ибо есть мусора...

Классификация по стилю

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

Классификация по применению

Программистам редко приходится сталкиваться с данным классом паттернов, но все же стоит о нем упомянуть, чтобы иметь хотя бы общее представление. Это самый высокоуровневый класс паттернов. В него входят целые классы паттернов. Например:

  • Паттерны тестирования
  • Паттерны документирования
  • Паттерны организации производственных процессов
  • Паттерны организации рабочих мест

И многие другие. Но я надеюсь их уже не нужно расписывать, вы вполне теперь способны продолжить этот список и без моих подсказок.

Заключение

Какие преимущества дают нам паттерны? Отвечу на этот вопрос, цитируя John Vlissides ( Влиссидес):

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

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

Для тех, кого заинтересовали паттерны, советую найти и почитать книги:

  • Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес: Приемы ООП. проектирования.
  • Джон Влиссидес: шаблонов проектирования. Дополнительные штрихи.

Original link
17 Комментариев
  • 1.вася зашортил сипу
    2.мурманск зашортил сипу
    3.вася зашортил мурманска
    4.Вопрос: когда они встретятся с колей?
    • Igr
      08 марта 2018, 13:40
      А.С., вася никогда 
    • Тарас Громницкий
      08 марта 2018, 19:19

      А.С., Коля Маржов очень любит плечистых.

      Поэтому Мурманск встретит его раньше.

  • Growex
    08 марта 2018, 14:03
    паттерны шматтерны… все настолько же субъективно как похожие на лошадок облака.
  • valmac
    08 марта 2018, 14:18
    хорошая обзорная инфа предназначенная для другой целевой аудитории — для вэб-ремесленников ))))
    • Андрей К
      08 марта 2018, 20:03
      хорошая обзорная инфа предназначенная для другой целевой 
      если захочется в какой нибудь банк на алго на базе c#, там по такой инфе гоняют на собеседовании и в хвост и в гриву
      • Сергей Кузьминов
        09 марта 2018, 11:36
        Андрей К, по такой инфе и в хвост и в гриву гоняют любого программиста, устраивавшегося на работу. Потому что программист это знать обязан. Но алготрейдеры в 95% не программисты. Это самоучки, где то что-то увидел, как-то написал, как-то работает, ну и хрен с ним. Тем более, большинство играет в перетаскивание кубиков в тслабе, что врядли можно вообще назвать интеллектуальным трудом, не то, что программированием. А Lua, хоть и поддерживает ООП, но не знаю таких случаев, когда необходимо этим пользоваться, потому что любой скрипт — это не больше 500 строк, как правило. 
  • Сергей Кузьминов
    08 марта 2018, 14:45
    Боже, паттерны, шаблоны, MVC… Зачем? Для кого? Для тслаба? Какой абсурд. О чем это все? Зачем это все? MVC используется по большей части для веба, на стороне сервера просто потому что ТАК УДОБНО. Нигде больше это использовать не имеет смысла. Зачем это тут?
  • Павел "Polis6" Пашкин
    08 марта 2018, 15:25
    хрень
  • Тарас Громницкий
    08 марта 2018, 19:12

    В общем то всё верно.

    За исключение выбора места для публикации.

    Смартлаб — это соцсеть для поболтать на отвлечённые темы.

    И публика тут соответствующая.

    Поэтому всё, что сложнее теханализа здесь не заходит.

    Необходимость паттернов могут понять только практикующие программисты, которые уже столкнулись со стандартными проблемами.

    Для местной публики — это как мобильник для попуасов.

    Вроде что-то красивое, но зачем непонятно.

    • Growex
      09 марта 2018, 08:28
      Тарас Громницкий, стандартной проблемой является тайминг закрытия позиции. ВСЁ. Других проблем нету просто.
      • Тарас Громницкий
        09 марта 2018, 09:00

        Growex, хороша шутка.

        А если серьёзно, то

        вам сюда www.ozon.ru/context/detail/id/2457392/

        и сюда ru.wikipedia.org/wiki/GRASP

        • Growex
          09 марта 2018, 14:05
          Тарас Громницкий, зачем это мне? К моей работе это крайне слабо относится
          • Тарас Громницкий
            09 марта 2018, 16:04

            Growex, чтобы говорить со знанием дела.

            И понимать, что кроме таймингов есть масса других вещей.

            • Growex
              09 марта 2018, 18:01
              Тарас Громницкий, так вы о каком деле говорите то? Начать изучать то что не нужно совершенно? Спасибо конечно, но я не бессмертный. Все что мне нужно это протестированная и настроенная торговая система. Всё остальное это плюшничество.
              • Тарас Громницкий
                10 марта 2018, 06:16

                Growex, а писать то её кто будет и по каким правилам ?

                Или она сама с неба свалится ?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн