اهداف دوره جامع طراحی و پیاده سازی مدرن نرم افزار :
این دوره با هدف آموزش تمام مهارت های لازم جهت تولید نرم افزار با کیفیت و کم هزینه برای برنامه نویسان طراحی شده است. دانشجو در ابتدای دوره با Code Smell ها آشنا می شود و تفاوت بین کد خوب و کد بد را می آموزد. سپس نکات و روش های Clean Coding را می آموزد و از طریق مثال های واقعی با نحوه نوشتن کد تمیز آشنا می شود. سپس با یادگیری روش های Refactoring و تکنیک های آن، نحوه اصلاح کدهای فعلی خود را یاد می گیرد.
پس از یادگیری اصول کدنویسی و پیاده سازی صحیح، دانشجو وارد بحث طراحی و معماری سیستم می شود. ابتدا با مفاهیم و اصول طراحی شی گرا مانند SOLID آشنا می شود و پس از آن الگوهای طراحی (Design Pattern) را می آموزد.
پس از آن دانشجو با Unit Testing و TDD و پس از آن با Acceptance Testing و BDD آشنا می شود و روش ها و اصول نوشتن تست های خودکار را فرا می گیرد و به طور حرفه ای از فریم ورک ها و ابزارهای آن مانند Specflow وxUnit استفاده می کند.
پس از این مرحله، پروژه ای به عنوان هدف تعریف می شود تا به عنوان Case-Study طراحی و پیاده سازی شود. در این مرحله دانشجو با Domain-Driven Design آشنا شده و اجزاء سیستم هدف را از طریق Strategic Design شناسایی و تفکیک می کند و پس از آن الگوها و روش های مطرح شده در Tactical Design را از طریق پیاده سازی یکی از Bounded Context ها می آموزد. سپس لایه های دیگر نرم افزار از جنبه طراحی و معماری مورد بررسی قرار می گیرد و پیاده سازی آنها بر روی پروژه هدف انجام می گیرد. در جریان این پیاده سازی، تکنیک ها و الگوهای زیادی مانند CQRS, Micro services, Event Sourcing مورد بررسی و پیاده سازی قرار خواهند گرفت.
در آخر دوره دانشجو (که جلسات قبل با Claim-Based Identity آشنا شده است) راه اندازی یک Identity Server را مشاهده می کند و با مفاهیم و پروتکل های استاندارد آن (مانند OAuth و Open ID Connect) آشنا می شود.
سرفصل دوره جامع طراحی و پیاده سازی مدرن نرم افزار
Clean Coding, Refactoring
- Code Smells
- Practices & Techniques of Clean Coding
- Pattern-Based Refactoring
- Defensive Coding
- Design by Contract & Code Contracts
Software Design
- Software Design Process
- Software Architecture
- Detailed Design
- The Object Model (Classes & Objects)
- Relationships among Classes (Dependency, Association, Aggregation, Composition, ...)
- Design Smells
- Design Principles (GRASP, SOLID, KISS, DRY, …)
- Dependency Injection
Design Patterns
-
Creational Patterns
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
-
Structural Patterns
- Adapter
- Bridge
- Composite
- Decorator
- Façade
- Flyweight
- Proxy
-
Behavioral Patterns
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Domain-Driven Design, CQRS
- Introduction to DDD
- Ubiquitous Language
-
Strategic Design
- Domain
- Subdomain & Types
- Bounded Context
- Context Mapping
-
Tactical Design & Patterns
- Entity
- Value Object
- Aggregate & Aggregate Root
- Domain Service
- Domain Event
- Repository
- Factory
-
Relationship between bounded contexts
- Shared Kernel
- Customer/Supplier
- Conformist
- Anti-Corruption Layer (ACL)
- Separate Ways
- Open Host Service
- Published Language
-
Integrating Bounded Contexts
- Via REST, RPC
- Via Messaging
- Introduction to NServicebus
-
Architecture
- Onion Architecture, Hexagonal Architecture, Ports and Adapters, Clean Architecture
- Domain Layer
- Application Layer
- Infrastructure Layer
- Service Layer
- Presentation Layer
-
Cross-Cutting Concerns
- Aspect-Oriented Programming (AOP)
- Logging
- Caching
- Security
- Exception Handling
- Command Query Responsibility Segregation
- Event Sourcing
Persistence
- Introduction to Popular ORMs (NHibernate, EF, …)
- Techniques for Persisting Aggregate Using Entity Framework & NHibernate
- Repository & UnitOfWork Pattern
- Introduction to NoSQL
Service Layer
- Introduction to REST, RPC
- REST Architectural Constraints
- REST API Design Strategies & Rules
- Content Negotiation
- Introduction to ASP.NET Web API
- Advanced Web API Topics (Versioning, Message Handlers, Media Formatters, Security, …)
Presentation Layer
- Introduction to SPA (Single-Page Application) & Frameworks (Angular, React)
- Presentation Patterns (MVVM, MVC, MVP)
- Task-based UI
Identity Management
- Terminology (STS, RP, Token, …)
- Claim-based Identity
-
OAuth, OpenID Connect
- Implicit Flow
- Authorization Code Flow
- Client Credential Flow
- Resource Owner Password Credential Flow
- OWIN, Katana, ASP.NET Identity
- Thinktecture Identity Server
Test-Driven Development (TDD)
- Terminology (Test Suite, Test Method, …)
- Goals of Test Automation
- Levels of Testing (Unit, Integration, Acceptance, Stress, …)
- Test Pyramid
- Testable Design
- Quality Attributes of Good Test suite
- Test Smells
- Testing Strategies
- Introduction to TDD
- TDD Cycle
- .NET Testing frameworks (xUnit, NUnit, …)
- Test Doubles (Mock, Fake, Stub, …)
- .NET Test Double Frameworks (NSubstitute, Moq, …)
- 4-Phase Tests
- Fixture-Setup Patterns
- Result Verification Patterns & Frameworks (FluentAssertions, NFluent, …)
- Fixture-Teardown Patterns
- Test Parallelization
- Testing Database & Data Access Layer
- Continuous Testing Tools (NCrunch)
- Continues Integration Tools (TFS, Team City)
- Code Coverage Tools (DotCover)
Behavior-Driven Development (BDD)
- Terminology (Feature, Acceptance Criteria, Example, …)
- Feature Injection
- Identifying Key Examples
- Using Ubiquitous Language in Scenarios
- Introduction to Gherkin Syntax (Given/When/Then)
- Introduction to Specflow
- Layering & Architecting Acceptance Tests
-
Automating UI Layer
- Introduction to browser Automation tools (Selenium)
- Page Object Model Pattern
- Automating Non-UI Layer
آموزش Design Pattern-آموزش معماری نرم افزار- آموزش تست نرم افزار-آموزش Clean Code- آموزش Refactoring-دوره آموزش design pattern