Каковы наиболее важные компоненты инфраструктуры в крупномасштабном развитии?
Каковы некоторые из базовых компонентов для корпоративных бизнес-приложений? Я думаю о компонентах многократного использования, которые могут использоваться несколькими приложениями:
- Увеличивайте быстрее
- Ускорение развития за счет устранения перестройки
- Обеспечение стабильной инфраструктуры путем минимизации ключевых точек отказа
Некоторые примеры концепций, которые я видел успешными в централизации / стандартизации:
- протоколирование
- очередями
- планирование
3 ответа
Я бы добавил графические виджеты, которые позволяют командам поддерживать одинаковый внешний вид во всех приложениях.
Кроме того, в большом проекте, где несколько команд должны работать над подсистемами, которые собираются соединить вместе в некоторый момент, набор шаблонов проектирования для подобных подсистем неоценим.
Кроме того, хорошо зарекомендовало себя создание общего набора библиотек (или, что еще лучше, в C++ с использованием Boost), которые лучше всего использовать, когда требуется общая утилита.
Я также хотел бы создать среду тестирования с образцами в самом начале. Я обнаружил, что если у вас есть шаблон для тестирования подсистем, то люди будут его использовать. Без каких-либо рамок тестирования на ранних этапах вы обязательно получите все крайности тестирования разработчика.
Когда вы говорите компоненты, вы имеете в виду компоненты кода или компоненты инфраструктуры? Я бы сказал, что инфраструктура (поддерживающая сервисы и процессы), а не код, дает наибольшую пользу качеству, скорости и простоте разработки. Примеры, которые вы приводите, находятся сейчас в стандартных библиотеках большинства языков или сильно зависят от приложения / варианта использования.
Я также собираюсь предположить, что управление версиями - это само собой разумеющееся, поскольку оно является неотъемлемой частью любой разработки.
Я бы сказал, что наиболее важной инфраструктурой будет непрерывное построение / автоматизированное тестирование. Это позволяет людям писать любой код, который они хотят, проверять его и убедиться, что он работает со всеми остальными.
Вторым по важности будут общие библиотеки. Они позволяют людям развиваться быстрее и устанавливать стандарты (надеюсь, хорошие) для внешнего вида, ощущения и дизайна. Поскольку общие библиотеки используются все больше, важность непрерывной сборки возрастает, поскольку небольшие изменения в них могут вызвать регрессию.
Одна проблема с общими библиотеками, однако, заключается в том, что им нужно много усилий, чтобы хорошо спроектировать, поэтому их стоит использовать повторно, и для их достижения требуется много времени. Большинство из них будут начинаться как специфические для проекта, а затем кто-то взломает их в своем проекте, затем последует некоторое ветвление, затем копирование и вставка. Через несколько лет, возможно, кто-то проверит код и начнет объединять их в общее место. Должен быть составлен план обновления общих библиотек и того, как (или если) иметь две версии одновременно. Другим скрытым недостатком является то, что они обеспечивают более быструю разработку в краткосрочной перспективе, но препятствуют разработке в долгосрочной перспективе, так как люди становятся заблокированными в более старых версиях (это больше относится к сторонним библиотекам).
В-третьих, это инструменты для сборки. Это означает общие инструменты, упрощающие сборку, проверку, поиск и иным образом любое взаимодействие с кодом. Вещи, которые автоматически помечают ошибки как исправленные, когда вы отправляете исправление, или уведомляете постоянных сборщиков об изменении зависимостей, или автоматически запускаете тесты перед отправкой теста, что упрощает (и ускоряет) выполнение тестов.
В-четвертых, это герметичные сборки, которые являются простым расширением инструментов сборки. Это означает, что приложение является автономным. Это имеет два преимущества: 1) повторное использование машины проще и, что более важно, 2) разработчику невероятно легко начать работу - им не нужно устанавливать дополнительные библиотеки, или что-то менять в / etc, или устанавливать что-то в их среда - она просто строит и запускает.
Некоторые другие я могу думать о:
- Мониторинг: если все используют один и тот же метод мониторинга, люди не должны отслеживать общие библиотеки. Это также облегчает выявление проблем, поскольку все данные находятся в одном месте.
- Хранение бревен: Жадность и срывание бревен - боль. Наличие централизованного места, где все журналы хранятся в структурированном формате, облегчает поиск и поиск проблем.
- Управление филиалами: в большом проекте это позволяет разработчикам разрабатывать, тестировать тестеров и выпускать релизы, не наступая друг другу на ноги.
Не полностью в инфраструктурном пространстве:
- Определены логические модели данных.
- Определенные бизнес-процессы (с охватом крайних случаев).
Без этого у вас есть ряд активов разработки приложений для одного и того же клиента.
- протоколирование
- очередями
- планирование
Все это должно быть готово для удовлетворения потребностей приложений, использующих их. Например, решение для ведения журнала для приложения, построенного на J2EE, будет отличаться от.NET. (На значительном предприятии монокультура может быть проблемой сама по себе.)