Чтобы это понять, надо вспомнить какие стадии проходит проект прежде, чем превратиться в готовую программу:

Видение

Зачем проект нужен Вашему бизнесу?

Вы в курсе, что разработка более-менее сложной программы занимает минимум 1 месяц?

А Вы пробовали переводить время в деньги? Например, при создании модуля для сайта 1 месяц работы может легко вылиться в 100-150 тыс. руб

Так нужно ли Вам тратить столько? Может быть проще не делать задачу вообще?

Документ “Видение” позволяет понять, нужен ли проект бизнесу и сколько именно (в плане денег) он даст + даёт какое-то представление о функционале программе.

По “Видению” можно оценить проект в самых общих чертах, с ошибкой 700-800%

Далее, после принятия решения о старте, задача отдаётся на составление Технического задания (ТЗ)

Техническое задание

Основная цель ТЗ – докопаться до абсолютно всех альтернатив.

Что такое альтернативы? Хм…

Как Вы думаете, почему проекты очень сильно задерживаются при сдаче?

Да потому что в самом конце выясняется, что не сделано что-то очень важное.

И именно это очень важное и называется альтернативой. То, что не видно сразу, но что по факту занимается основное, до 99%, время.

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

Хорошо, ТЗ составлено. Можно приступать к кодированию?

Не тут-то было. Между ТЗ и программированием есть некий этап, на который практически никто не обращает внимание.

Этот этап – корень зла!  Серьезно.

Именно он ответственен за огромное количество ошибок, которые возникают и еще возникнут в Вашей программе.

Системная архитектура

Как обычно поступает программист когда получает ТЗ?

Естественно он сразу бросается кодировать. Причем в прямом смысле этого слова. Т.е. начинает придумывать процедуры, классы и создавать структуру БД прямо на ходу.

В этом и беда. Непродуманная архитектура чревата тем, что её приходится переделывать по нескольку раз, вставлять костыли и править в 20-30 местах разом вместо одного.

В одном месте поправил, а в другом забыл. Поставил костыль здесь, а он не сработал в другом месте.

Это и есть причина ошибок.

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

А ведь можно подумать и сделать такую архитектуру, когда код какого-то класса пишется один раз и больше не изменяется никогда. Вообще никогда.

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

Да, это возможно.

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

Документ “Системная архитектура” в общем случае представляет из себя обычный текстовый файл с пошаговым описанием алгоритмов и их входных и выходных параметров.

Например, Вы описываете простыми понятными словами пошаговую последовательность действий по добавлению нового пользователю в Базу данных.

Но при этом понимаете, что профиль пользователя может быть совершенн разным и состоять из произвольного количества полей. И что нужно при этом как-то хранить ещё и настройки пользователя.

И что желательно сделать какой-то универсальный механизм для всего этого.

Но Вы не делаете это механизм прямо сразу. Вы просто его описываете словами.

Поверьте, этого вполне достаточно.

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

Алгоритм разработки системной архитектуры

Поймите Вашу бизнес-задачу

Почему возникла задача и почему Ваш бизнес готов пойти на огромные затраты, чтобы её реализовать. Что за выгода такая?

Определите ограничения

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

Или, например, Вы даёте скачивать файлы, но не хотите при этом светить на них прямые ссылки.

Ну и т.п. В общем, всё, что нужно учесть при реализации.

Продумайте, что может меняться в будущем

Очень важный пункт, который позволяет Вам написать такой код, который не нужно будет менять вообще никогда, даже через 10 лет, несмотря на появление нового функционала. Да, такое бывает!

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

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

Но точка входа при этом останется той же самой (поменяется лишь набор входных параметров).

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

Таким образом Вы делаете задел на будущее – предусматриваете, что сможете подключить к системе любые варианты, какие бы они не были. Даже те, про которые Вы сегодня не знаете.

Опишите пошаговый алгоритм на обычном человеческом языке

Не нужно опускаться на уровень “добавляем такое-то значение в такое-то поле БД”.

Описание должно быть примерно таким:

  1. Регистрируем пользователя
    1. Определяем, есть ли такой пользователь в БД
    2. Если нет — регистрируем. Если да – не проводим регистрацию.
    3. Подписываем пользователя на рассылку
    4. Высылаем письмо администратору о регистрации нового пользователя

Что на вход

Каждый шаг алгоритма — по сути процедура / функция / метод класса.

У каждой процедуры есть входные и выходные параметры. Опишите их.

Входные параметры:

  1. ФИО пользвателя
  2. Email
  3. Пароль

Что на выход

Точно также нужно описать и результат, который возвращает процедура:

  1. Исключение в случае ошибки
  2. Код пользователя в БД

Придумайте названия процедур на английском

Теперь осталось только придумать названия на английском языке для всех процедур и их параметров.

Системная архитектура готова!

Описанная здесь системная архитектура взята из практики и не раз выручала программистов в очень сложных ситуациях.

Пользуйтесь ей и улучшайте качество своего кода и кода программистов своего отдела.

Если считаете эту статью полезной, опубликуйте её у себя в facebook. Twitter или Вконтакте.

Связанные записи

Share →

Добавить комментарий