مبانی معماری نرم افزار - بخش اول

معماری نرم افزار، رویکرد طراحی کلان برای ایجاد مدل هایی است که کیفیت و عملکرد سیستم نرم افزار را به تصویر می کشد.در حوزه architectural نیاز داریم با مفاهیم زیر آشنا شویم.Quality Attribute / CharacteristicsArchitectural StylesArchitectural PatternsArchitectural TacticsQuality Attribute / Characteristicsمعماری نرم افزار بر پایه مشخصه های کیفی است که موفقیت سیستم را در کنار functionality سیستم تعریف می کند. برای مثال performance, availability, scalability, maintainability, testability. این موارد، راه حل های ارائه شده توسط ما در دسته مشخصه های کیفی در سطح architecture هستند و معماری نرم افزار مشخصا در این مشخصه های کیفی تاثیر گذار است. زمانی که می خواهیم به یک سیستم و architecture آن اشاره کنیم و آن را توصیف کنیم، عمدتا از اصلاح Characteristics یا مشخصه استفاده می کنیم. و زمانی که در مورد context design صحبت می کنیم، از اصطلاح Quality Attribute یا مشخصه کیفی استفاده می کنیم. برای مثال، مفهوم scalability جزو quality attributeهایی است که در ذهن یک طراح است و زمانی که طراح می خواهد در مورد آن سیستم صحبت کند به high scalable بودن آن اشاره می کند.Architectural Stylesاگر در مورد یک ساختار صحبت کنیم، می توانیم در قالب مجموعه ای از componentها و connectorها به آن نگاه کنیم. connector به توصیف ارتباط بین componentها می پردازد. یک architectural style در اصل یک vocabulary از انواع componentها و connectorها و مجموعه ای از محدودیت ها برای ترکیب آن ها را تعریف می کند. همچنین architectural style یک رابطه اسم گذاری شده بین componetها است که مجموعه ای از architecture characteristicها را پوشش می دهد.برای مثال، مجموعه ای از componentها و روابط بین آن ها که داخل خود مجموعه ای از characteristicها را دارند، microservices architecture نامگذاری می شود.به طور خلاصه، architectural styleها راه حل هایی General و structureهایی باز تکرار شونده در سطح architecture سیستم هستند. برای مثال، Pipes & Filters یک architectural style است که مجموعه ای از componentها و روابط بین آن ها را در قالب یک راه حل ارائه می دهد و شامل quality attributeهایی است که در مسائل مختلفی می توان از آن ها استفاده کرد.Architectural Patternsمفهوم pattern یا الگو در تمام levelهای design وجود دارد. pattern در مورد مشکلی توضیح می دهد که بازتکرار است و هسته اصلی یک راه حل را برای آن ارائه می دهد. بطوری که میلیون ها بار بدون انجام کار تکراری قابل استفاده باشد. در architectural design نیز تعداد زیادی pattern وجود دارد که در سطح معماری، راه حل هایی را ارائه می کنند. برای مثال MVC یک architectural pattern است. به این دلیل که برخلاف styleها، ساختار کلی برنامه را شامل نمی شود و برای طراحی design لایه presentation استفاده می شود. به این دلیل به آن architectural گفته می شود که دارای سطوح مختلف abstraction می باشد و به لایه presentation ساختار می دهد. الگوهای CQRS و API Gateway را می توانیم به عنوان نمونه های دیگری از architectural patternها مثال بزنیم. در نهایت هدف pattern ساختن یک vocabulary مشترک است. Architectural Tacticsدر مطالعه quality attributeها مبحثی به نام quality attribute scenario وجود دارد که برای بررسی quality attributeها استفاده می شود و دارای دو سطح General و Concrete می باشد. در این حوزه چند پارامتر وجود دارد.پارامتر Stimulus یا محرک، اتفاقی است که باعث trigger شدن یک موضوع می شود. برای مثال اگر در مورد availability صحبت می کنیم، محرک آن fault است. اتفاقی که باعث می شود این quality attribute تحت تاثیر قرار بگیرد.پارامتر Stimulus Source منبع ایجاد کننده یک محرک است.پارامتر Response، یک پاسخ در سیستم است که طراح یا معمار در مقابل محرکی که اتفاق می افتد در نظر می گیرد. برای مثال در availability، شناسایی یا detect fault، به عنوان یک response می باشد. یک tactic در حقیقت یک design decision است که بر دستیابی به quality attribute response تاثیر می گذارد. برای مثال در availability، راه حل هایی که می توانند وجود داشته باشند برای مثال ایجاد cluster، ایجاد سیستم جایگزین، شناسایی سریع خطا، ایجاد health check، ایجاد monitoring و tacticهای دیگری که در حوزه های مختلف وجود دارد را می توانیم داشته باشیم. یا برای resiliency می توانیم از circuit breaker به عنوان یک tactic استفاده کنیم.بطور خلاصه، معماری نرم افزار شامل تصمیمات طراحی کلیدی است که ساختاری را برای رسیدن به مشخصه های کیفی ایجاد می کنند.