اصول طراحی
- آشنایی با Design Smell های متداول و نشانه های آنها
- اصول طراحی SOLID
- Single Responsibility Principle
- Open/closed principle
- Liskov substitution principle
- Interface segregation principle
- Dependency inversion principle
- آشنایی با تکنیک Dependency Injection
- آشنایی با IoCC های معروف دات نت و نحوه ی استفاده از آنها
- نگاهی بر الگوی Service Locator
- آشنایی با اصول KISS، DRY، YAGNI، SoC
تست نرم افزار
طراحی پیشرفته آبجکت
- آشنایی با انواع تست نرم افزار (Unit Testing، Integration Testing و ... )
- آشنایی با رویکرد Test Driven Development و مفاهیم آن
- اصول نوشتن Unit Test و کار با MS Test
- تکنیک Mocking و کار با کتابخانه ی Moq جهت پیاده سازی آن
- استفاده از ابزارهای ویژوال استودیو جهت ساخت کتابخانه های Fake جهت تست
Domain Driven Design
- آشنایی با تفکر و رویکرد Domain-Driven در طراحی نرم افزار
- مفاهیم Domain، Domain Model، Ubiquitous Language و ...
- مفهوم Sub-Domain و انواع آن (Core، Generic، Supporting)
- آشنایی با Bounded Context و سند Context Map
- پیاده سازی ACL ها جهت ارتباط بین Bounded Context ها
- مفهوم Aggregate و Aggregate Root
- مفهوم Entity و Value Object
- آشنایی با Service های مختلف (Domain Service، Application Service و ... )
- آشنایی با Domain Event ها
معماری نرم افزار
- آشنایی با Onion Architecture (معماری پیاز) و نحوه ی لایه بندی در آن
- لایه Domain
- مفهوم Business Logic و نحوه جداسازی آن از زیرساخت نرم افزار
- اصل Persistence Ignorance
- یادگیری الگوهای متداول این لایه :
- Factory Method Pattern
- State Pattern
- Template Method Pattern
- Decorator Pattern
- Strategy Pattern
- Specification & Composite Specification
- لایه Application
- مفهوم Application Logic و وظایف لایه ی Application
- نگاهی بر سرویس های مبتنی بر Workflow و آشنایی با WF
- یادگیری الگوهای متداول این لایه :
- Observer Pattern
- Mediator Pattern
- Event Aggregator Pattern
- Adapter Pattern
- Command Pattern
- لایه Service
- نگاهی بر SOA و اصول آن
- آشنایی با REST و سرویس های RESTful
- پیاده سازی سرویس های RESTful باNET Web API
- نگاهی بر سرویس های SOAP و WCF
- لایه DataAccess
- نگاهی بر ORM های معروف دات نت
- مقایسه ی EF Core و NHibernate و استفاده از آن در رویکرد DDD
- آشنایی با NHibernate
- آشنایی با انوع Mapping در NHibernate
- آشنایی با Session ها در NHibernate
- آشنایی با Component Mapping، Collection Mapping، Inheritance Mapping و ... در NHibernate
- یادگیری نحوه ی Map کردن Entity ها و Value Object ها در NHibernate
- مدیریت همزمانی (Concurrency) در NHibernate
- کار با Interceptor ها، Event ها و Caching در NHibernate
- Connection و Transaction
- یادگیری الگوهای متدوال برای کار با پایگاه داده :
- Repository
- Unit of Work
- Transaction Per Request
- Transaction Per Use Case
- لایه Presentation
- نگاهی بر مفهوم Task-Based UI
- نگاهی بر برنامه های وب تک صفحه ای - Single Page Applications
- نگاهی بر Rich Desktop Clients
- آشنایی با الگوی MVC و فریم ورک های متدوال جاوا اسکریپت مانند Angular
- آشنایی با الگوی MVVM و پیاده سازی آن در WPF
- آشنایی با فریم ورک های جاوا اسکریپت تحت MVVM مانند Knockout JS
- Cross Cuttings
- Security
- آشنایی با مفهوم Claim-Based Identity
- آشنایی با OAuth 2
- آشنایی با پروژه ی OWIN و Katana
- یادگیریNET Identity
- پیاده سازی مکانیزم احراز هویت باNET Identity و OWIN
- Logging
- پیاده سازی مکانیزم ثبت رویداد ها (Event Log)
- پیاده سازی مکانیزم ثبت Exception Log و معرفی کتابخانه های مرتبط
- پیاده سازی مکانیزم ثبت Audit Log
- Caching
- Configuration Management
الگوی CQRS
- آشنایی با الگوی CQRS
- آشنایی با مفهوم Eventual Consistency و مدل BASE
- آشنایی با Command ها و Command Handler ها
- آشنایی با Event ها و Event Handler ها
- آشنایی با Event Bus و Command Bus
- Messaging و معماری Event-Driven
- آشنایی با MSMQ
- آشنایی با مفهوم Service Bus در SOA
- پیاده سازی زیر ساخت Messaging با RhinoBus