Es gibt keine endgültige Antwort darauf, da "Softwarearchitektur" und "Softwaredesign" eine Reihe von Definitionen haben und es auch keine kanonische Definition gibt.
Eine gute Denkweise ist die Aussage von Len Bass, Paul Clements und Rick Kazman, dass "jede Architektur Design ist, aber nicht alles Design Architektur" [Software Architecture in Practice]. Ich bin mir nicht sicher, ob ich damit einverstanden bin (weil Architektur andere Aktivitäten umfassen kann), aber es erfasst die Essenz, dass Architektur eine Entwurfsaktivität ist, die sich mit der kritischen Teilmenge des Entwurfs befasst.
Meine leicht flippige Definition (auf der Seite mit den SEI-Definitionen) ) lautet, dass es sich um eine Reihe von Entscheidungen handelt, die bei falscher Entscheidung dazu führen, dass Ihr Projekt abgebrochen wird.
Ein nützlicher Versuch, Architektur, Design und Implementierung als Konzepte zu trennen, wurde vor einigen Jahren von Amnon Eden und Rick Kazman in einem Forschungsbericht mit dem Titel "Architektur, Design, Implementierung" unternommen, der hier zu finden ist: http: //www.sei.cmu .edu / library / assets / ICSE03-1.pdf . Ihre Sprache ist ziemlich abstrakt, aber vereinfacht gesagt sagen sie, dass Architektur Design ist, das in vielen Kontexten verwendet werden kann und systemweit angewendet werden soll. Design ist (err) Design, das in vielen Kontexten verwendet werden kann, aber in einem bestimmten Teil angewendet wird des Systems und Implementierung ist ein kontextspezifisches Design, das in diesem Kontext angewendet wird.
Eine Architekturentscheidung könnte also eine Entscheidung sein, das System über Messaging anstelle von RPC zu integrieren (es ist also ein allgemeines Prinzip, das an vielen Stellen angewendet werden kann und auf das gesamte System angewendet werden soll). Eine Entwurfsentscheidung könnte darin bestehen, einen Master zu verwenden / Slave-Thread-Struktur im Eingabeanforderungsbehandlungsmodul des Systems (ein allgemeines Prinzip, das überall verwendet werden kann, in diesem Fall jedoch nur in einem Modul verwendet wird) und schließlich könnte eine Implementierungsentscheidung darin bestehen, die Sicherheitsverantwortung vom Anforderungsrouter zu verschieben an den Request Handler im Request Manager-Modul (eine Entscheidung, die nur für diesen Kontext relevant ist und in diesem Kontext verwendet wird).
Ich hoffe das hilft!