На этот вопрос нет однозначного ответа, потому что «архитектура программного обеспечения» и «разработка программного обеспечения» имеют довольно много определений, и для них нет канонического определения.
Хороший способ думать об этом - высказывание Лена Басса, Пола Клемента и Рика Казмана, что «вся архитектура - это дизайн, но не весь дизайн - это архитектура» [Архитектура программного обеспечения на практике]. Я не уверен, что полностью согласен с этим (поскольку архитектура может включать в себя другие действия), но она отражает суть того, что архитектура - это проектная деятельность, которая имеет дело с критическим подмножеством дизайна.
Мое слегка легкомысленное определение (находится на странице определений SEI ) состоит в том, что это набор решений, которые, в случае неправильного принятия, приводят к отмене вашего проекта.
Полезная попытка отделить архитектуру, дизайн и реализацию от концепций была сделана Амноном Иденом и Риком Казманом несколько лет назад в исследовательской работе под названием «Архитектура, дизайн, реализация», которую можно найти здесь: http: //www.sei.cmu. .edu / library / assets / ICSE03-1.pdf . Их язык довольно абстрактен, но в простом выражении они говорят, что архитектура - это дизайн, который может использоваться во многих контекстах и предназначен для применения во всей системе, дизайн - это (ошибочный) дизайн, который может использоваться во многих контекстах, но применяется в определенной части. системы и реализации - это дизайн, специфичный для контекста и применяемый в этом контексте.
Таким образом, архитектурное решение может быть решением об интеграции системы с помощью обмена сообщениями, а не RPC (так что это общий принцип, который может быть применен во многих местах и предназначен для применения ко всей системе), проектное решение может заключаться в использовании мастера / подчиненная структура потока в модуле обработки запросов ввода (общий принцип, который можно использовать где угодно, но в данном случае он используется только в одном модуле) и, наконец, решение о реализации может состоять в том, чтобы переместить ответственность за безопасность от маршрутизатора запросов обработчику запросов в модуле диспетчера запросов (решение, относящееся только к этому контексту, используемое в этом контексте).
Надеюсь, это поможет!