اصول کلیدی معماری نرم افزار

پرووید

دسته های مقالات

معماری نرم افزار فرآیند تعریف کردن یک راه‌ حل ساختارمند (Structured Solution) است که
تمامی نیازمندی های تکنیکی (Technical) و عملیاتی (Operational) را برآورده کند و در عین حال ویژگی ‌های کیفی مشترک
(Common Quality Attributes) از قبیل کارایی (Performance) امنیت (Security) و قابلیت مدیریت پذیری (Manageablity) را
بهینه کند. معماری نرم افزار شامل مجموعه ای از تصمیم گیری ها بر اساس فاکتورهای متعددی است که تمامی این تصمیم گیری ها
می‌توانند بر روی قابلیت هایی از قبیل کیفیت کارایی (Performance) نگهداری (Maintainability) و موفقیت سراسری نرم افزار
تأثیرگذار باشند.

این مقاله از وب سایت پرووید در رابطه با الگو ها (Pattern) و اصول (Principle) سطح بالایی
(High Level) است که امروزه در معماری نرم افزار استفاده می شود. به طور کلی به این اصول و الگو ها سبک های معماری
(Architecture Style) گفته می‌شود. بعضی از این سبک های معماری شامل سبک‌ های کلاینت سرور (Client Server) معماری لایه
لایه (Layered Architecture) معماری مبتنی بر کامپوننت (Component-based Architecture) معماری‌های خط پیام (Message Bus
Architecture) و معماری های سرویس گرا (Service Oriented Architecture) است. در این سری مقالات از وبسایت پرووید ما در
رابطه با هر کدام از این اصول به طور کلی صحبت می‌کنیم. مزیت ‌های اصلی هر کدام را به شما خواهیم گفت و اطلاعاتی در
رابطه با این معماری ها به شما ارائه می دهیم تا بتوانید به تصمیم‌ گیری بهتری در انتخاب هر سبک معماری برسید.

باید دقت کرد که هر کدام از این سبک های معماری در رابطه با جنبه های مختلفی از نرم افزار
هستند. برای مثال بعضی از سبک های معماری در رابطه با الگو های استقرار (Deployment) هستند. بعضی دیگر در رابطه با مباحث
مربوط به طراحی و ساختار (Structure) نرم افزار هستند و بعضی دیگر در رابطه با عوامل ارتباطی (Communication Factor) نرم
افزار ها هستند. در نتیجه بسیاری از نرم افزار های امروزی ترکیبی از بیش از یک سبک معماری توضیح داده شده در این قسمت را
استفاده خواهند کرد.

سبک معماری چیست؟

یک سبک معماری (Architectural Style) که گاهی به آن الگوی معماری (Architectural Pattern)
هم گفته می شود مجموعه ای از اصول (Principle) یا حتی می‌تواند یک الگوی دانه درشت (Coarse Grained Pattern) باشد که یک
چهارچوب انتزاعی (Abstract Framework) را برای خانواده از سیستم ها فراهم می‌کند. یک سبک معماری تکه تکه کردن
(Partitioning) سیستم و استفاده مجدد (Reuse) از طراحی را بهبود می بخشد. آن این کار را با فراهم کردن راهکار هایی
(Solution) برای مشکلاتی (Problem) که عموماً رخ میدهند انجام میدهند.

به طور کلی می‌توان به الگوها و سبک های معماری به عنوان مجموعه ای
از اصول فکر کرد که یک نرم افزار را شکل میدهند. داشتن درک دقیقی از سبکهای معماری چندین مزیت دارد. مهم‌ترین مزیت این
که آنها یک زبان مشترک (Common Language) را برای ما فراهم می‌کنند. علاوه بر این امکان صحبت کردن در رابطه با مسائلی که
وابستگی به تکنولوژی خاصی ندارند (Technology Agnostic) را فراهم میکند. به عبارت دیگر صحبت کردن در رابطه با مسائل سطح
بالایی که شامل الگوها و اصول می‌شود و ربطی به جزئیات پیاده‌سازی ندارد. برای مثال با استفاده کردن از سبک های معماری
شما می توانید در رابطه با الگوهای Client Server یا N-Tier صحبت کنید. سبک های معماری می توانند توسط حوزه تخصص شان
دسته بندی شوند. جدولی که در ادامه آمده است حوزه‌های اصلی تمرکز هر کدام از سبک های معماری را لیست کرده است.

سبک های معماری اصلی

لیست زیر سبک های معماری معمول را که در این مقاله بررسی
شده‌اند را نشان می‌دهد. به علاوه این لیست شامل توصیف کوتاهی در رابطه با هر کدام از سبک ‌ها است. قسمت های بعدی
این مقاله در رابطه با جزئیات هر کدام از این سبک ها توضیحاتی را به شما ارائه خواهد داد. علاوه بر این راهنمایی شما
برای انتخاب سبک مناسب برای نرم افزارتان موضوعی است که در قسمت های بعدی به آن پرداخته می‌شود.

  • سبک معماری Client Server: این سبک معماری سیستم را به دو قسمت تقسیم می‌کند که در آن کلاینت درخواست
    ‌هایی را به سرور می فرستند. در بسیاری از موارد سرور یک دیتابیس است با Application Logic ی است که در قالب
    Stored Procedure هایی تعریف شده است.
  • سبک معماری Component-baesd: این سبک معماری طراحی برنامه را به کامپوننت های منطقی (Logical) و
    عملیاتی (Functional) که قابلیت استفاده مجدد (Reuseability) دارند تجزیه میکند. این کامپوننت ها از طریق یک
    واسط (Interface) هایی که خوش تعریف (Well Defined) هستند با هم ارتباط برقرار میکنند.
  • سبک معماری Domain Driven Design: این سبک معماری به صورت شی گرا عمل می کند و تمرکز آن بر روی مدل
    کردن یک Business Domain و تعریف کردن Business Object هایی که بر اساس Entity ها در درون Business Domain تشکیل
    شده اند می باشد. سبک معماری Layered: این سبک معماری برنامه را به لایه های مختلف که به صورت پشته بر روی هم
    قرار گرفته‌اند تقسیم می‌کنند.
  • سبک معماری Message Bus: این سبک معماری از یک سیستم نرم افزاری برای دریافت و ارسال پیام ها از طریق
    یک یا چندین کانال ارتباطی (Communication Channel) استفاده می‌کند. بنابراین برنامه ‌ها می‌توانند بدون نیاز به
    دانش در رابطه با جزئیات یکدیگر با هم تعامل برقرار کنند. معماری N-Tier: این سبک معماری نیز شبیه معماری
    Layered نرم افزار را به صورت لایه لایه تقسیم می‌کند. تفاوت این معماری با معماری Layered این است که Tier های
    مختلف بر روی کامپیوتر هایی که از لحاظ فیزیکی تفکیک شده استند قرار می گیرند. معماری شی گرا (Object Oriented):
    این نوع طراحی بر اساس تقسیم کردن وظایف (Responsibility) یک نرم افزار یا سیستم به شی (Object) هایی است که
    قابلیت استفاده مجدد (Reuseability) دارند و خود تکمیل (Self Sufficient) هستند و هر کدام شامل داده (Data) و
    رفتارهای (Behavior) مربوط به آن شی میباشند.
  • سبک معماری سرویس گرا (Service Oriented): این سبک معماری به برنامه‌هایی اطلاق می شود که عملیات
    (Functionality) خود را از طریق سرویس ‌هایی در اختیار مصرف ‌کنندگان (Consumer) قرار می‌دهند. مصرف کنندگان از
    طریق پیام ها (Message) و قرارداد هایی (Contract) از آن سرویس ها استفاده می کنند.

ترکیب کردن سبک های معماری

معماری یک سیستم نرم افزاری تقریبا هیچ گاه محدود به یک
سبک معماری تک نیست. بلکه اغلب ترکیبی از سبک های معماری مختلف است که تمامی سیستم را تشکیل می دهند. برای مثال
ممکن است که شما یک طراحی سرویس گرا داشته باشید که از سرویس ‌هایی تشکیل شده است که با استفاده از معماری لایه
بندی توسعه داده شده اند و از سبک معماری شی گرا در آنها استفاده شده است.

از دیگر کاربردهای استفاده ترکیبی از سبک های معماری زمانی
است که قصد ساختن یک وب اپلیکیشن را دارید که در آن می توانید به صورت کاملا موثر تفکیک Separation of Concerns
را با استفاده از سبک معماری لایه ای به دست بیاورید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *