Infrastructure as Code
روشی برای مدیریت و پیکربندی زیرساخت های فناوری اطلاعات میباشد، در این روش برای تنظیمات و عملیات ها به جای تنظیمات دستی از کد استفاده میشود. این روش به تیم های فناوری اطلاعات امکان اتوماسیون عملیات ها و تنظیمات در ساختار های خود را میدهد و مزیت استفاده از آن بهینگی و ثبات در تمامی فرایند ها است.
API Gateway & Service Mesh
یک API Gateway درگاه ارتباطی مرکزی یک سیستم microservice میباشد که درخواست های Client های مختلف را به microservice مورد مرتبط با درخواست ارسال میکند و همچنین وظیفه اطمینان حاصل کردن از احراز هویت درخواست دهنده و امنیت اطلاعات را بر عهده دارد.
اصطلاح Service Mesh به نحوه مدیریت ارتباط و ارائه خدمات غیر متمرکز در microservice ها گفته میشود. هنگان استفاده از این روش هر microservice وظیفه ارتباط بین سرویس ها و همچنین برقراری امنیت اطلاعات و کنترل ترافیک درخواست ها بر عهده خود آن سرویس است که از طریق نصب یک proxy سبک در کنار آن سرویس ممکن میشود.
CQRS (Command Query Responsibility Segregation)
یک الگوی معماری در دنیای نرمافزار که هدف آن جداسازی دستورات و درخواست های ثبت و تغییر اطلاعات از دستورات و درخواست های خوانش آن اطلاعات در بخش های مختلف از نرمافزار است.

دلیل پیداش این الگوری معماری نرمافزار در مشکلات مدل های سنتی تر مدیریت فرایند ها بر روی داده ها و اطلاعات میباشد. در مدل های سنتی به دلیل یکپارچه بودن پایگاه داده ها تمامی درخواست ها از جمله درخواست ثبت جدید اطلاعات و درخواست تغییر اطلاعات قبلی و درخواست خواندن اطلاعات همگی بر یک پایگاه داده اعمال میشدند که بخش مشکل ساز همین بخش است.
از دلایل مشکل ساز بودن این طراحی میتوان به فرکانس هر نوع درخواست جداگانه اشاره کرد، برای مثال درخواست های خواندن اطلاعات در مقایسه با درخواست ثبت اطلاعات جدید با فرکانس خیلی بیشتری استفاده میشوند پس درخواست ثبت اطلاعات ممکن است در پشت یک صف طولانی از درخواست های خواندن اطلاعات گیر بکند.
Event-Driven Architecture (EDA)
معماری مبتی بر رویداد یک نوع معماری سیستم های نرمافزار است که هنگام پیاده سازی و استفاده از آن ارتباط بین بخش های مختلف نرمافزار از طریق ارسال و دریافت پیام هایی به نام Event انجام میشود. یک Event یا رویداد در دنیای برنامه نویسی به یک بسته پیام گفته میشود که در شرایط خاصی که معمولا نام خود را نیز از همان شرایط خاص دریافت میکند، فراخوانی میشود و اطلاعاتی مبنی بر وضعیت پیش آمده و فرستنده پیام با خود همراه دارد. در این نوع از معماری نرمافزار تلاش بر این است که تا حد ممکن تعاملات میان مولفه های نرمافزاری از طریق ارسال و دریافت Event انجام شود که در عمل باعث کاهش وابستگی مولفه های نرمافزاری به یکدیگر خواهد شد.

Serverless Architecture
برای درک و آشنایی با این مفهوم اول باید با مفهوم Server Architecture آشنا شد، در معماری با سرور تمامی فرایند های تنظیمات و مدیریت سخت افزاری سروری تا نرمافزار مستقر شده بر روی آن و وضعیت آن ها در شبکه اینترنت برای خدمت دهی توسط تیم تولید و توسعه انجام میشود.
در معماری Serverless تخصیص منابع سرور و تنظیمات آن توسط شرکت ثالث ارائه دهنده خدمات ابری انجام میشود. در این معماری تیم توسعه نرمافزار کاربردی، محصول خود را در قالب توابع مختلف برنامه نویسی میکند و ارائه دهنده خدمات ابری منابع خاص برای اجرای این توابع را به آن ها تخصیص میدهد.
پس در این مدل معماری نرمافزار توسعه یافته در اصل یک سری و گروه از Function های مستقر در فضای ابری هست که وظیفه مدیریت منابع و اجرای آن ها بر عهده یک ارائه دهنده خدمات ابری است.
API-first Approach
یک دیدگاه و نحوه نگرش به تولید محصولات نرمافزاری تحت وب میباشد که در این نگرش API های شما اولین چیزی هستند که طراحی میشوند و ساختار back-end و client شما برگرفته از این API های طراحی شده میباشد. هدف از این نوع نگرش به توسعه یک محصول تمرکز بر روی استفاده نهایی محصول و همچنین ارائه خدمات بهتر و کامل تر با قابلیت استفاده مجدد به کاربران سیستم نرمافزاری است
Domain Driven Design
یک روش طراحی نرمافزار که در آن محدوده مسئله که محصول نرمافزاری با هدف حل آن و یا ارائه خدمات در آن توسعه داده میشود بسیار اولویت بالایی در تصمیمات طراحی و تولید نرمافزار دارد. برای مثال اگر شما در حال توسعه یک نرمافزار مالی هستید، نگرش Domain Driven به شما کمک میکند تا با روش های مختلف مثل استفاده از دانش نخبگان این حوزه مالی بتواند به بهترین نحو مسائل خود را مدل سازی کنید و حیطه کاری نرمافزار شما در فرایند طراحی و تولید اولویت اول باشد.

Hexagonal architecture
معماری شش ضلعی که با نام Ports and Adapters نیز شناخته میشود. یک نوع معماری سامانه های نرمافزاری هست که هدف آن جداسازی و کاهش ارتباط مستقیم هسته اصلی نرمافزار که قابلیت های کسب و کاری آن را ارائه میدهد با لایه های خارجی آن از جمله لایه ارتباطی کاربر و یا لایه پایگاه داده است.
در معماری شش ضلعی هسته اصلی نرمافزار با تمامی ساختار های خارجی از طریق درگاه های مشخص (Ports) که درگاه های ارتباطی انتزاعی (Interface) هستند انجام میشود. این درگاه ها پروتکل های ارتباطی و نحوه ارتباط با هسته نرمافزار را تعیین میکنند.

Event Sourcing
یک الگوری طراحی و نحوه پیاده سازی رویداد ها درون نرمافزار است که مشابه نگهداری یک گزارش بسیار ریز از تمامی اقدامات زمان اجرای نرمافزار شما میباشد. در این روش نرمافزار شما به جای تغییر حالت برنامه به هر شکلی، آن را به صورت رویداد هایی که ثبت میشوند انجام میدهد. از این طریق شما میتوانید تمام وقایعی که باعث وضعیت فعلی اجراایی نرمافزار شدند را از اول مجدد اجرا کنید و تک تک گام ها را در اختیار داشته باشید.
با استفاده از این الگوری طراحی شما میتوانید در هر زمان از اجرا به زمانی در گذشته برگردید و هیچ وضعیتی از برنامه برای کاربر از دست نخواهد رفت که در نرمافزار های مالی و تجاری یک مزیت بسیار مهم حساب میشود.

Low-code/No-code platforms
سکو های low-code و no-code مکان های برای توسعه نرمافزار با هدف کاهش کدنویسی مورد نیاز برای توسعه آن نرمافزار ها هستند. در سکو های low-code تلاش بر این است که با استفاده از یک سطح متوسط از انتزاعات بخش قابل توجهی از کدنویسی مورد نیاز برای توسعه یک نرمافزار حذف شود و توسعه دهنده با استفاده از روش های مختلف گرافیکی و کمی کدنویسی در سطح بالاتر نرمافزار مورد نیاز خورد را توسعه دهد. هدف سکو های no-code یک قدم فراتر رفتن و حذف کامل نیاز به کدنویسی برای توسعه نرمافزار هست که در حال حاضر نرمافزار هایی با هسته های ساده تر و کمتر شخصی سازی شده در آن ها توسعه داده میشوند.
Business Process Management Systems (BPMS)
سیستم های پردازش مدیریت کسب و کار، نرمافزار هایی هستند با هدف بهبود و بهینه کردن تمامی فرایند های یک کسب و کار و کاهش خطا های اجرایی و هزینه های تمامی این فرایند ها و هدف اصلی آن ها روز به روز بهتر شدن وضعیت مدیریت و اجرای فرایند ها در یک کسب و کار میباشد.
برخی از این نرمافزار ها عبارتند از:
Message Queue (such as Kafka and RabbitMQ)
یک Message Queue مکانیزمی برای ارتباط و انتقال اطلاعات بین بخش ها و سرویس های مختلف یک معماری نرمافزاری گسترده هست این نرمافزار ها همچنین به عنوان یک حافظه موقت برای درخواست های سامانه و مسیریاب درون سامانه نیز استفاده میشوند.
سامانه Kafka یک نرمافزار open source توسعه یافته توسط Apache Software Foundation هست که با هدف ارائه به عنوان Message Queue تولید شده است. این نرمافزار وعده عدم قطعی و از دست رفتن اطلاعات میدهد که برگرفته از طراحی گسسته و چند پایگاه داده ای آن میباشد.
سامانه RabbitMQ نیز یک نرمافزار open source در رقابت با Kafka میباشد یک قابلیت های مشابهی ارائه میدهد با برخی معایب و مزیت ها در مقایسه با Kafka ، از مهمترین مزیت های آن میتوان به پشتیبانی از پروتکل های Massaging بیشتر اشاره کرد.
Container orchestration (such as Kubernetes)
کانتینریزه کردن نرمافزار ها روشی برای بسته بندی گروه های نرمافزاری در کنار هم در حین جداسازی بخش های منطقی مختلف آن ها است. Container orchestration در زمان نیاز به استقرار چند Container در کنار هم برای رسیدن به یک سیستم واحد مطرح میشود و به نحوه مدیریت ارتباط این Container ها به عنوان یک سیستم کامل که در کنار هم مستقر شده اند تا نیاز های مخاطب را پاسخ دهند گفته میشود.
نرمافزار Kubernetes یک نرمافزار open source برای اتوماسیون استقرار و کانتینریزه کردن نرمافزار ها و مدیریت ارتباط آن ها به عنوان یک سامانه واحد است و در دنیای امروزی برای پیاده سازی سیستمی با استفاده از چند Container متفاوت بسیار بهتر از رقبا عمل میکند.
Multi-Tenancy Architecture
در این مدل معماری نرمافزار و System Design سامانه های تحت وب، نسخه های مختلف نرمافزاری ارائه شده به کاربران مختلف برای عملکرد خود از سامانه های پایه ای مشترک استفاده میکنند. در این مدل معماری به هر نسخه نرمافزار نهایی ارائه شده به گروهی از کاربران یک Tenant یا مستاجر گفته میشود و چندین نرمافزار Tenant میتوانند از یک سرس سامانه های پایه ای واحد خدمات دریافت کنند و به فعالیت خود به صورت مجزا با کاربرانی مجزا ادامه دهند.

Enterprise Integration Patterns
یک گروهی از الگو های طراحی که هدف آن ها توسعه نرمافزار هایی با ساده سازی ادغام نرمافزار های جدید و یا موجود دیگر با آن ها است. یک کتاب با همین نام توسط Gregor Hohpe نوشته شده است که در 65 الگوی طراحی در قالب 9 دسته مختلف معرفی شده اند که هرکدام به نوع خود به توسعه دهنده یک نرمافزار سازمانی کمک میکنند که نرمافزار خود را از پایه با قابلیت ادغام با دیگر نرمافزار ها توسعه دهد.