از سری مطالب معماری و مهندسی نرم افزار #2
مفاهیمی در معماری نرم افزار خیلی وقت ها کج فهمیده میشه و در این مطلب سعی میکنم این موضوع رو کمی تشریح کنم.
1. معماری نرم افزار (Software Architecture):
معماری نرم افزار به موضوع شناخت و ترسیم کلیت نرم افزار و شکستن کل به بخش های مختلف، رفتارها و ارتباطاتش با دیگر اجزا مانند سرویس ها و برنامه های خارجی، دیتابیس، سرور ها و زیر ساخت ها می پردازد.
همچنین دید کلی از سامانه های نرم افزاری، شبکه ارتباطات داخلی و خارجی(external)، نگهداری و توسعه نرم افزار ها که ارتباط تنگاتنگی با معماری استفاده شده در نرم افزار ها دارد. به طور ساده تر و خلاصه تعریف معماری نرم افزار رو میتونیم به شکل: نقشه ای برای مدیریت پیچیدگی ها/نیازمندی های سیستم و ایجاد ارتباط و هماهنگی بین بخش های مختلف بیان کرد.
از معروف ترین معماری های نرم افزار، میتوان موارد زیر را نام برد:
معماری یکپارچه یا Monolithic
معماری سرویس گرا/مبتتنی بر سرویس یا SOA
معماری میکروسرویس یا Microservice
2. الگوی معماری نرم افزار (Software Architecture Pattern):
الگوهای معماری نرم افزار، جهت جداسازی منطق و ساختار لایه های مختلف، قابلیت استفاده مجدد و توسعه آنها استفاده میشوند. تعیین پروتکل های ارتباطی و منطق لایه های مختلف مانند لایه Presentation، دیتابیس و دسترسی به داده، سرویس ها و ... از خواص الگوی معماری انتخاب شده ارث میبرند. در واقع آنها روش هایی برای کمک به مشکلات و نیاز های مربوط به طراحی نرم افزار ارائه میدهند.
خیلی ها معماری و الگوی معماری نرم افزار را یکسان تلقی میکنن. در آموزش ها، مقالات و وبسایت ها اغلب یا به اشتباه توضیح داده میشن یا به یکسان. شیوه و روش طراحی نرم افزار، با معماری کل نرم افزار تفاوت دارد. به نما و کلیت معماری ساختمان، ساختار و سازه های داخلی و نحوه ارتباط اجزا مختلف و استفاده اونها فکر کنید. به سیم کشی ها و پیچیدگی های مخفی شده در بین سازه ها و ارتباط دیوارها و ستون ها، نحوه باز شدن درب و پنجره و .. اینها یکسان هستند؟!
برخی از پرکاربرد ترین الگوهای معماری نرم افزار(Architectural Patterns) :
- الگوی سه لایه و چند لایه 3Layer & N-Layer و n-Tire
- الگوی MVC (Model View Controller)
- الگوی MVP (Model View Presenter)
- الگوی MVVM (Model View Viewmodel)
رویکرد طراحی دامنه محور یا Domain Driven Design، به اختصار DDD ( اینجا اوردم چون خیلی با معماری و الگو اشتباه میگیرن)
3. الگوی طراحی نرم افزار (Software Design Pattern):
الگوهای طراحی (Design Patterns)، به شیوه و راه حل های مشکلات رایج در طراحی نرم افزار میپردازند. به عبارت دیگر مجموعه ای از بهترین راه حلهای مشکلات متداول در فرآیند برنامه نویسی نرم افزار را الگوهای طراحی مینامند.
الگوهای طراحی جزو معماریهای نرم افزاری نیستند و فقط شیوه ای صحیح از کدنویسی را ارائه میدهند. بنابراین این الگوها فقط در قلمرو کدنویسی ( مخصوصا شی گرا) وارد میشوند و مستقل از زبانهای برنامه نویسی هستند. ( در رابطه با تاریخچه و گروه Gang Of Four معروف به GOF، طبقه بندی کننده و نویسنده اولین کتاب الگوهای طراحی، مطلب جداگانه ای مینویسم)
**هر دیزاین پترن برای اهداف مشخصی ایجاد شده که به برخی از کاربردی ترین ها اشاره میکنم:
1. الگوهای طراحی سازنده(Creational)، به حل مشکلات مربوط به ایجاد اشیا در نرم افزار اشاره میکنند؛ مانند:
- الگوهای سازنده یا Builder، کارخانه یا Factory، یکتا/یگانه یا Singleton،
تزریق وابستگی یا Dependency Injection
2. دسته دیگر معروف به الگوهای طراحی ساختاری(Structural)، به مدیریت ارتباط میان کلاسها و شیها با یکدیگر پرداخته مانند:
- الگوهای فساد یا Facade، مخزن یا Repository، تزئین کننده یا Decorator، آداپتور یا Adapter، پُل یا Bridge، پراکسی یا Proxy
3. دسته دیگری معروف به الگوهای طراحی رفتاری(Behavioral)، به راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا با یکدیگر میپردازند؛ مانند:
- الگوهای دستور یا Command، واحد کار یا UnitOfWork، واسطه گر یا Mediator، توکن یا Memento
* الگوهای طراحی مزایایی همچون افزایش سرعت توسعه، انعطاف و توسعه پذیری، کاهش خطاها، مشکلات و میزان کدنویسی نرم افزار را به همراه دارند. ( البته کد کمتر همیشه درست یا خوب نیست، کد بیشتر هم همینطور، کد تمیز و ساختار مند انعطاف، مطالعه و توسعه پذیری توسط دیگران رو هم بالا میبره)
در عین حال استفاده نادرست و غلط از آنها نتیجه عکس خواهد داد و میتواند سربار و مشکلات دیگری اضافه کند؛ مانند استفاده های نادرست از الگوهای طراحی ریپازیتوری، تزریق وابستگی و ioc
در ادامه به ترتیب به تشریح 3 مفهوم فوق میپردازم.
@csharpfriends
#SoftwareArchitecture #SoftwareArchitecturePattern #SoftwareDesignPattern
مفاهیمی در معماری نرم افزار خیلی وقت ها کج فهمیده میشه و در این مطلب سعی میکنم این موضوع رو کمی تشریح کنم.
1. معماری نرم افزار (Software Architecture):
معماری نرم افزار به موضوع شناخت و ترسیم کلیت نرم افزار و شکستن کل به بخش های مختلف، رفتارها و ارتباطاتش با دیگر اجزا مانند سرویس ها و برنامه های خارجی، دیتابیس، سرور ها و زیر ساخت ها می پردازد.
همچنین دید کلی از سامانه های نرم افزاری، شبکه ارتباطات داخلی و خارجی(external)، نگهداری و توسعه نرم افزار ها که ارتباط تنگاتنگی با معماری استفاده شده در نرم افزار ها دارد. به طور ساده تر و خلاصه تعریف معماری نرم افزار رو میتونیم به شکل: نقشه ای برای مدیریت پیچیدگی ها/نیازمندی های سیستم و ایجاد ارتباط و هماهنگی بین بخش های مختلف بیان کرد.
از معروف ترین معماری های نرم افزار، میتوان موارد زیر را نام برد:
معماری یکپارچه یا Monolithic
معماری سرویس گرا/مبتتنی بر سرویس یا SOA
معماری میکروسرویس یا Microservice
2. الگوی معماری نرم افزار (Software Architecture Pattern):
الگوهای معماری نرم افزار، جهت جداسازی منطق و ساختار لایه های مختلف، قابلیت استفاده مجدد و توسعه آنها استفاده میشوند. تعیین پروتکل های ارتباطی و منطق لایه های مختلف مانند لایه Presentation، دیتابیس و دسترسی به داده، سرویس ها و ... از خواص الگوی معماری انتخاب شده ارث میبرند. در واقع آنها روش هایی برای کمک به مشکلات و نیاز های مربوط به طراحی نرم افزار ارائه میدهند.
خیلی ها معماری و الگوی معماری نرم افزار را یکسان تلقی میکنن. در آموزش ها، مقالات و وبسایت ها اغلب یا به اشتباه توضیح داده میشن یا به یکسان. شیوه و روش طراحی نرم افزار، با معماری کل نرم افزار تفاوت دارد. به نما و کلیت معماری ساختمان، ساختار و سازه های داخلی و نحوه ارتباط اجزا مختلف و استفاده اونها فکر کنید. به سیم کشی ها و پیچیدگی های مخفی شده در بین سازه ها و ارتباط دیوارها و ستون ها، نحوه باز شدن درب و پنجره و .. اینها یکسان هستند؟!
برخی از پرکاربرد ترین الگوهای معماری نرم افزار(Architectural Patterns) :
- الگوی سه لایه و چند لایه 3Layer & N-Layer و n-Tire
- الگوی MVC (Model View Controller)
- الگوی MVP (Model View Presenter)
- الگوی MVVM (Model View Viewmodel)
رویکرد طراحی دامنه محور یا Domain Driven Design، به اختصار DDD ( اینجا اوردم چون خیلی با معماری و الگو اشتباه میگیرن)
3. الگوی طراحی نرم افزار (Software Design Pattern):
الگوهای طراحی (Design Patterns)، به شیوه و راه حل های مشکلات رایج در طراحی نرم افزار میپردازند. به عبارت دیگر مجموعه ای از بهترین راه حلهای مشکلات متداول در فرآیند برنامه نویسی نرم افزار را الگوهای طراحی مینامند.
الگوهای طراحی جزو معماریهای نرم افزاری نیستند و فقط شیوه ای صحیح از کدنویسی را ارائه میدهند. بنابراین این الگوها فقط در قلمرو کدنویسی ( مخصوصا شی گرا) وارد میشوند و مستقل از زبانهای برنامه نویسی هستند. ( در رابطه با تاریخچه و گروه Gang Of Four معروف به GOF، طبقه بندی کننده و نویسنده اولین کتاب الگوهای طراحی، مطلب جداگانه ای مینویسم)
**هر دیزاین پترن برای اهداف مشخصی ایجاد شده که به برخی از کاربردی ترین ها اشاره میکنم:
1. الگوهای طراحی سازنده(Creational)، به حل مشکلات مربوط به ایجاد اشیا در نرم افزار اشاره میکنند؛ مانند:
- الگوهای سازنده یا Builder، کارخانه یا Factory، یکتا/یگانه یا Singleton،
تزریق وابستگی یا Dependency Injection
2. دسته دیگر معروف به الگوهای طراحی ساختاری(Structural)، به مدیریت ارتباط میان کلاسها و شیها با یکدیگر پرداخته مانند:
- الگوهای فساد یا Facade، مخزن یا Repository، تزئین کننده یا Decorator، آداپتور یا Adapter، پُل یا Bridge، پراکسی یا Proxy
3. دسته دیگری معروف به الگوهای طراحی رفتاری(Behavioral)، به راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا با یکدیگر میپردازند؛ مانند:
- الگوهای دستور یا Command، واحد کار یا UnitOfWork، واسطه گر یا Mediator، توکن یا Memento
* الگوهای طراحی مزایایی همچون افزایش سرعت توسعه، انعطاف و توسعه پذیری، کاهش خطاها، مشکلات و میزان کدنویسی نرم افزار را به همراه دارند. ( البته کد کمتر همیشه درست یا خوب نیست، کد بیشتر هم همینطور، کد تمیز و ساختار مند انعطاف، مطالعه و توسعه پذیری توسط دیگران رو هم بالا میبره)
در عین حال استفاده نادرست و غلط از آنها نتیجه عکس خواهد داد و میتواند سربار و مشکلات دیگری اضافه کند؛ مانند استفاده های نادرست از الگوهای طراحی ریپازیتوری، تزریق وابستگی و ioc
در ادامه به ترتیب به تشریح 3 مفهوم فوق میپردازم.
@csharpfriends
#SoftwareArchitecture #SoftwareArchitecturePattern #SoftwareDesignPattern
Telegram
C# Friends
از سری مطالب معماری های نرم افزار #3
در مطلب قبل در رابطه با 3 مفهوم معماری، الگوی معماری و الگوی طراحی در معماری نرم افزار توضیح داده شد. حال به چند نمونه معروف و رایج معماری های نرم افزار (Software Architecture) میپردازیم.
1.1 معماری یکپارچه (Monolithic)…
در مطلب قبل در رابطه با 3 مفهوم معماری، الگوی معماری و الگوی طراحی در معماری نرم افزار توضیح داده شد. حال به چند نمونه معروف و رایج معماری های نرم افزار (Software Architecture) میپردازیم.
1.1 معماری یکپارچه (Monolithic)…