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