Два базовых типа архитектур

Предисловие и для кого эта статья
Добрый день.
Данная статья расчитана быть короткой, так как затрагиваемые здесь вопросы стары как мир и говорить о них долго, просто не имеет смысла. Мы поговорим о двух наиболее часто встречающихся архитектурах программ, это терминальные утилиты и программы с графическим пользовательским интерфейсом (GUI). Что сподвигло меня написать эту статью на сайте wap/web разработчиков спросите вы? Я хотел бы объяснить (или может напомнить), что же из себя представляют программы с различными архитектурами, и в по какому направлению следует идти в том или ином случае. Начнем.

Немного об архитектуре
Архитектура программы понятие довольно абстрактное и многозначное. В общем смысле под архитектурой понимается логическая организация компонентов программы, будь то пакеты, модули или компоненты GUI.
В данной статье мы рассмотрим архитектуры, определяющие взаимодействие модулей программы и GUI с программой.

От простого к сложному: терминальная программа
Любой из вас, кто когда либо изучал программирование, начинал именно с этой типы архитектуры. Терминальная архитектура обычно включает следующие правила работы программы:
1. Программа может получать текстовые данные из вне в виде параметров;
2. Программа может работать с входными и выходными потоками, доступными ей из вне (если вы не знакомы с понятиями потоков, не стоит расстраиваться, мы рассмотрим их чуть позже);
3. Программа может выполнять некоторые операции над имеющимися у нее данными;
4. Программа может возвращать целочисленный результат, информирующий ОС о результате выполнения программы.
Рассмотрим каждый пункт подробнее:
Входные параметры
Если вы поработаете с любыми утилитами ОС Unix, Windows, Linux или Mac, то вскоре поймете, что они могут получать некоторые входные значения, на пример:
cd <имяКаталога> - устанавливает в качестве текущего каталога данный.
Возможность передать программе (в данном случае утилите) некоторые данные и является передачей входных параметров. Программы написанные на таких языках как C/C++, Java и даже PHP могут получать некоторые входные параметры.
IO потоки
Входные (in) и выходные (out) потоки, это специальные абстракции, используемые в программах для обозначения потока данных, который может быть передан (выходной поток) или получен (входной поток) к/из некоторого источника. На пример при записи в файл вы работает с выходным потоком, а при чтении из него - с входным. Многие программы терминальной архитектуры работают с IO потоками терминала, для получения данных от пользователя и выводе их на экран.
Выполнение операций
Естественно, что программа должна уметь что либо делать с данными, иначе теряется смысл ее существования, поэтому останавливаться подробно на этом пункте не будет.
Флаг выполнения
Обычто при вызове программы с помощью ОС (такой как Linux, Windows, Unix, Mac и т.д.) вторая передает ей управление в виде создания нового процесса, в котором выполняется программа, и ожидает от нее некоторый целочисленный результат, информирующий о результате работы. Принято понимать под результатом 0 - удачное выполнение программы, а числа больше 0 означают ошибку в работе программы.
Как это связано с wap/web
Когда вы создаете PHP скрипты, вы по сути создаете маленькие программки, которые вызываются с использованием другой программы, обрабатывающей HTTP запросы (на пример apache). Эта "головная программа" в зависимости от запроса клиента передает управление тому или иному PHP скрипту, а тот, в свою очередь, работая с потоками ввода (на пример из файлов или других программ, таких как СУБД) и вывода (echo передает данные в поток вывода, который в свою очередь передается apache, который передает его в виде тела ответа клиенту). Таким образом при проектировании PHP программ стоит придерживаться терминальной архитектуры вида: получаем данные, обрабатываем их, возвращаем результат в поток вывода (возврат целочисленного результата можно опустить, так как он неявно передается PHP интерпретатором). Но когда речь заходит о DHTML+AJAX+PHP программах, все несколько изменяется.

GUI
Давайте рассмотрим программы с GUI. В данным момент, читая эту статью, вы используете программу с GUI - брайзер (существуют, кстати, браузеры без GUI, они выполняются в терминале (командной строке) и работают так же, как обычные, но с некоторыми ограничениями, на пример w3m. Во вложении вы можете посмотреть как выглядит visavi в браузере без GUI Не сможете, сайт не поддерживае вставку файлов в статьи :-( ). Что же такое этот GUI? В переводе с англиЦкого, это Графический пользовательский интерфейс, то есть способ взаимодействия с пользователем по средствам кнопок, полей ввода, окон и т.д. Программами с данным интерфейсом удобнее управлять (да простят меня терминальщики, но я говорю именно об удобстве, нежели о быстроте или гибкости!), но их архитектура гораздо сложнее терминальных программ.
Рассмотрим ее подробнее.
Две части
Программы с GUI обычно состоят из 2 частей, это:
1. Бизнел логика - то же, что и терминальная программа, то есть часть программы, ответственная за логику (как модель в MVC или PHP скрипт без echo);
2. GUI - часть программы, ответственная за представление состояния программы пользователю и взаимодействие с ним (как вид и контроллер в MVC или DHTML+AJAX в web'е).
Принцип работы
Те из вас, кто знакомы с MVC, легко поймут принцип работы программ с GUI. Обычно все строится по следующему алгоритму:
1. Создается бизнес логика, которая расчитана на прием и передачу простых текстовых сообщений с помощью предоставляемых ей IO потоков;
2. Создается представление, которое формирует графический интерфейс и обрабатывает события взаимодействия с пользователем и которое может передавать сообщения в бизнес логику (обычно все сводится к созданию интерфейса - инициализация - и обработке событий - листенеры);
3. Создается контроллер, который обрабатывает эти IO потоки и обеспечивает коммуникацию между представлением и бизнес логикой.
Сложность состоит в том, что терминальные программы состояти из 1 части - бизнес логики - а GUI вносит еще 2 компонента - представление и контроллер.

А как же web
web перенял терминальную архитектуру от wap'a, именно поэтому до сих пор используются такие костыльные компоненты, как шаблонизаторы, но с появлением web2.0 и HTML5 и развитию мобильных технологий главенствование терминальной архитектуры в web'e подходит к концу (лет так 10 еще просуществует, без паники).
GUI архитектура в web'е предполагает использование PHP как языка для создания бизнес логики программы (читать - сайта), JS, HTML, CSS и AJAX для создания графического интерфейса.
Этот подход позволит сократить объем трафика, используемый для коммуникации пользователя и программы, а так же увеличить возможности GUI, но в то же время программы станут сложнее, программисты разделяться на GUI-программистов и прикладных программистов, а дизайнерам придется работать не со статичным интерфейсом, а с динамичными структурами.

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

Так же хотелось бы попросить администрацию ресурса уделить больше внимания околоWEBовским технологиям, так сказать актуализировать их среди пользователей, а пользователей хотелось бы попросить обратить внимание на другие языки программирования и принципы работы таких важных системы как ОС и apache (ну или IIS).

Спасибо за внимание!

URL: https://visavi.net/articles/469