مخاطبین دوره DDD
- شرکت های تولید نرم افزار و یا سازمان هایی که به دنبال معماری مناسب جهت پیاده سازی نرم افزارهای تجاری بزرگ با کیفیت، قابل تست، مقیاس پذیر و توزیع شده با بازدهی بالا هستند.
- آن دسته از برنامه نویسانی که قصد دارند در تیم های حرفه ای توسعه ی نرم افزار جهت انجام پروژه های بزرگ شرکت داشته باشند.
- آن دسته از برنامه نویسانی که به مباحث طراحی و معماری نرم افزار علاقه داشته و قصد دارند تا با به روزترین روش های طراحی و معماری آشنا شوند.
اهداف دوره آموزش Domain-Driven Design
در دوره آموزش معماری نرم افزار دانشجو با اصول طراحی شی گراء آشنا شده و میتواند کلاس های استاندارد، قابل تست و قابل نگهداری طراحی کند. همچنین با تفکر DDD آشنا شده و میتواند در پروژه های خود از این رویکرد و همچنین تلفیق آن با الگوی CQRS برای توسعه ی نرم افزار استفاده نماید. در این دوره سعی شده است تا الگوهای طراحی (Design Patterns) نیز به شکل کاملا عملی و به صورت مثال در حین جلسات کلاس به دانشجویان آموزش داده شود.
سرفصل های دوره آموزشی Domain-Driven Design
1. اصول طراحی
در Domain Driven Design
- معماری Enterprise چیست
- آشنایی با Design Smell های متداول و نشانه های آنها
- اصول طراحی شی گرا SOLID چیست؟
- آموزش Single responsibility principle در SOLID
- آموزش Open Close Principle در SOLID
- اصل Liskov Substitution Principle در SOLID چیست؟
- مفهوم جدایی واسط ها (Interface Segregation Principle) در مهندسی نرم افزار
- اصل Dependency Inversion یا معکوس سازی وابستگی در SOLID چیست؟
- آشنایی با تزریق وابستگی یا Dependency Injection
- آشنایی با IoCC های معروف دات نت و نحوه ی استفاده از آنها
- مثال عملی و انجام پروژه در دوره
- نگاهی بر الگوی Service Locator
- آشنایی با اصول KISS، DRY، YAGNI، SoC
2. تست نرم افزار چیست؟
- بررسی انواع تست نرم افزار
- Integration Testing
- Unit Testing
- end-to-end Testing
- بررسی Test Driven Development یا به اختصار TDD و مفاهیم آن
- چگونه طراحی انجام دهیم که تست پذیر باشد
- آموزش اصول نوشتن Unit Test
- آموزش تکنیکهای Mocking
- پیاده سازی مفاهیم فوق در مثال و پروژه
- استفاده از ابزارهای ویژوال استودیو جهت ساخت کتابخانه های Fake جهت تست
3. آشنایی با مفاهیم Domain-Driven Design
- آشنایی با تفکر و رویکرد Domain-Driven در طراحی نرم افزار
- بررسی تکنیک های کشف و شناسایی مسئله
- توسعه رفتار محور (behavior-driven development)
- آشنایی با Event storming
- مفهوم strategy design
- مفاهیم Domain، Domain Model، Ubiquitous Language و ...
- آموزش مفهوم Sub-Domain و ویژگیهای آن
- آموزش Core domain
- آموزش Generic Subdomain
- آموزش Supporting Subdomains
- آشنایی با Bounded Context
- بررسی روابط بین Bounded Context
- پیاده سازی ACL ها جهت ارتباط بین Bounded Context ها
- آموزش سند Context Map
- آشنایی با مفاهیم Aggregate و Aggregate Root
- مفهوم Entity و Value Object
- آشنایی با Service های مختلف (Domain Service، Application Service، Repository و ... )
- آشنایی با Domain Event ها
4. معماری نرم افزار
-
آشنایی با معماریهای Domain Centric

- آموزش و پیاده سازی Onion Architecture (معماری پیاز) و نحوه ی لایه بندی در آن
- Hexagonal Architecture آشنایی با
- آشنایی با Clean Architecture
- Domain Centric بررسی لایه های
- بررسی لایه Domain

- مفهوم Bussiness Logic و نحوه جداسازی آن از زیرساخت نرم افزار
- اصل persistence Ignorance
- بررسی الگوهای متداول این لایه ( Strategy Pattern ,Decorator Pattern, Template Method Pattern,Factory Method , Builder , State)
- بررسی لایه Application
- بررسی وظایف Applicatin Service
- آموزش مفهوم Applicaion Logic
-
بررسی الگوهای متداول این لایه (Facade,Aggregator,Service)
- Observer Pattern
- Mediator Pattern
- Event Aggregator Pattern
- Adapter Pattern
- Command Pattern
- بررسی لایه Prsistence
- نگاهی بر ORM های معروف دات نت ( Entity Framework , NHibernate )و مقایسه آنها
- پیاده سازی الگوی Repository و Unit of Work
- یادگیری نحوه Map کردن Entity ها و Value Object ها
- نحوه مدیریت همزمانی (Concurrency)
- Transaction Per Request
- Transaction Per Use Case
- لایه Service
- نگاهی برSOA و اصول آن
- آشنایی با Rest و سرویسهای RESTful
- بررسی پترنهای پیاده سازی سرویسهای RESTful
- پیاده سازی سرویس های RESTful با ASP.NET Web API
- نگاهی بر سرویس های SOAP و WCF
-
لایه Presentation
- نگاهی بر مفهوم Task-Based UI
- نگاهی بر برنامه های وب تک صفحه ای - Single Page Applications
- آشنایی با الگوی MVVM و پیاده سازی آن در WPF
5. Cross Cuttings
- آشنایی با رویکرد AOP و پیاده سازی آن
- پیاده سازی Logging
- پیاده سازی Authentication و Authorization
- Security
- آشنایی با مفهوم Claim-Based Identity
- پیاده سازی مکانیزم احراز هویت
- پیاده سازی مکانیزم ثبت رویداد ها (Event Log)
- پیاده سازی مکانیزم ثبت Exception Log و معرفی کتابخانه های مرتبط
- پیاده سازی مکانیزم ثبت Audit Log
- Caching
- Configuration Management
6. الگوی CQRS چیست
- بررسی الگوهای CQS و CQRS و مقایسه آنها
- منظور از Eventual Consistency چیست
- بررسی Event Driven Architecture
- آموزش Event Sourcing در آموزش معماری نرم افزار
- پیاده سازی سیستم Messaging با استفاده از MassTransit و RabbitMQ
- نحوه جداسازی Write,Read در CQRS با استفاده از Event Driven Architecture
- پیاده سازی الگوی CQRS
بخش اول سرفصل Domain Driven Design
بخش دوم سرفصل Domain Driven Design