Что почитать по проектированию архитектуры?

    Текущий проект на работе разросся до огромных размеров и продолжает расти.
    Так получилось, что большая часть была создана людьми, которые уже не в проекте. И качество кода многих компонент зачастую ужасно. Но все это работает, пользователи всем этим пользуются и потому русское
    «Это все никуда не годиться. Легче все написать заново» — не применимо.

    Проект построен на связке tomcat,struts c java-сервером работающим с postgres. С веб-частью(tomcat) вроде все нормально. В самом сервере каша — где сам функционал по работе с БД.

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

    Потому хочется почитать что-то по теме и дать почитать коллегам.
    Не то чтобы я с луны свалился. Опыт какой никакой есть. И книг перечитано не мало.
    Но возможно хабра-люди посоветуете что-то наиболее практичное с вашей точки зрения, без сухой теории.
    (на русском языке, в бумажном виде, по теме: архитектура, паттерны проектирования, рефакторинг, разработка корпоративных приложений) — что-то наиболее приближенное к практике разработки большой быстро расширяемой системы.

    уже есть(читал) по теме или близко:
    — Рефакторинг. Фаулер
    — Совершенный код. Стив Макконнелл
    — Архитектура корпоративных программных приложений. Фаулер (хорошая книга)
    — Еще какие-то одинаковые книги типа «Разработка корпор.приложений с помощью UML, J2EE» от
    Гради Буча и пр.

    Интересно не что-то общее из цикла типа RUP процессов разработки, а конкретно по архитектуре
    и шаблонам развертывания, на примере конкретных коммерческих проектов.

    Заранее спасибо за комментарии

    Комментарии 16

      0
      да.. и еще очень интересна тема организации back-end (админки)
      зачастую это более сложный и важный функционал чем front-end
      туда входит конфигурация и настройка различных cron-процессов (scheduling)

      возможно есть какие-то налаженные конфигурации
      например я работал с подобной системой у amazon, но мог ознакомиться только с некоторыми частями
      системы.
      что интересно не смотря на то, что куча конечных компонентов даже у них написана
      вроде и хрен знает как (много оутсорса и у индусов и у других) -
      в целом система легко расширяется и ее сложность от этого не увеличивается.
        0
        В общем то при разговорах об аршитектуре приложений все обычно ссылаются на Фаулера
        +1
        Роберт К. Мартин, Джеймс В. Ньюкирк, Роберт С. Косс
        Быстрая разработка программ. Принципы, примеры, практика

        http://www.ozon.ru/context/detail/id/157…
          0
          http://oz.by/books/more101783.html вот хорошая книга
            0
            ага .. это известная книга.. вроде была у меня или на работе у кого-то
            но она больше как раз фундаментального характера
              +1
              http://ooad.asf.ru тут есть справочник шаблонов из книги
                0
                Чисто прикладная.
              0
              Вот бы еще электронное издание кто-небудь вспомнил.)
                +2
                Возможно, помимо классических книжек, Вам стоит почитать на какой архитектуре работают большие и сложные системы, например: Amazon Architecture. Про Google почитать не предлагаю, ибо у них слишком уж специфические задачи и среда, а вот Amazon - типичный большой и сложный веб-проект.

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

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

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

                Обычно интерфейс позволяет использовать разные транспорты, напр. unix-сокеты или tcp, что облегчает масштабирование системы (разные сервисы можно разместить на разных серверах).

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

                Ещё один немаловажный факт: пока часть системы скрыта за интерфейсом, и работает корректно - вас не будут сильно интересовать качество кода этой системы, язык программирования на котором она написана и ОС под которой она крутится.

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

                При использовании такой архитектуры сложность не исчезает сама собой "magically", она переходит с уровня кода и логики системы на уровень проектирования: может оказаться очень непросто выделять достаточно независимые сервисы внутри текущей большой системы, и очень непросто разрабатывать достаточно простые и стабильные интерфейсы для доступа к этим сервисам.
                  0
                  Спасибо за развернутый ответ.. Да именно хочется помимо теории - почитать именно о существующих рабочих системах на примере.
                  0
                  13 октября на семинаре jug.ru "Designing High-Performance Distributed Systems for Event Processing" был полезный доклад Романа Елизарова, даже осталась презентация: http://www.jug.ru/servlets/images/meetin…
                  Там же рекомендуются две мегаполезные книжки:
                  * Design Patterns book by Erich Gamma
                  * Introduction to Algorithms by Cormen
                    +1
                    ЛУЧШЕ НЕ ИЗОБРЕТАЙТЕ ВЛЕСИПЕД. ВОТ ВАМ ССЫЛОЧКА: http://www.slideshare.net/vishnu/livejournals-backend-a-history-of-scaling/
                      0
                      комментить перестали) видимо, понравилась ссылочка)
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Джошуа Кериевски
                            "Рефакторинг с использованием шаблонов (паттернов проектирования)"
                            Переплёт: мягкий
                            Объём: 400 стр.
                            ISBN: 5845910870
                            Формат: 70x100/16
                            Серия: Signature Series
                            Дата выхода: 2006 г.
                            Издательство: Вильямс
                            URL: http://www.williamspublishing.com/Books/5-8459-1087-0.html

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

                            Самое читаемое