دوره جامع طراحی و پیاده سازی مدرن نرم افزار
درباره دوره
دوره جامع طراحی و پیاده سازی مدرن نرم افزار با هدف آموزش تمام مهارت های لازم جهت تولید نرم افزار با کیفیت و کم هزینه برای برنامه نویسان طراحی شده است.
سرفصل دوره آموزشی
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
پیش نیاز دوره
حداقل 3 سال سابقه برنامه نویسی با C#