• تهرانپارس ، خ شهید محمود آمینه بزرگراه رسالت، پلاک 213، طبقه2، واحد7

  • 021-77295097 0912-8099518

  • شنبه تا پنجشنبه۹ صبح تا ۶ بعد از ظهر

پکیج آموزش معماری پیاز(Onion Architecture)

درباره دوره

دوره جامع طراحی و پیاده سازی مدرن نرم افزار با هدف آموزش تمام مهارت های لازم جهت تولید نرم افزار با کیفیت و کم هزینه برای برنامه نویسان طراحی شده است.

تاریخ شروعتعداد ساعتساعت برگزارینام استادهزینه (تومان)وضعیتثبت نام

پیشنیاز ها

حداقل 3 سال سابقه برنامه نویسی با C#

مخاطبین

  • آن دسته از برنامه نویسانی که به مباحث طراحی و معماری نرم افزار علاقمند بوده و قصد دارند تا با بروزترین روش های طراحی و معماری آشنا شوند.
  • شرکت های تولید نرم افزار و سازمان هایی که به دنبال معماری مناسب جهت پیاده سازی نرم افزارهای تجاری بزرگ با کیفیت، قابل تست، مقیاس پذیر و توزیع شده با بازدهی بالا هستند.
  • آن دسته از تیم هایی که به دنبال اصلاح و ارتقای چرخه ی تولید خود توسط تکنیک ها و فرآیند های BDD می باشند.
  • آن دسته از برنامه نویسانی که به دنبال یادگیری تست نویسی در 3 حوزه ی Unit ،Integration و Acceptance می باشند.
  • برنامه نویسانی که قصد دارند با یادگیری اصول و الگوهای طراحی، نرم افزار با کیفیت، قابل توسعه و کارآمد طراحی کنند.

اهداف دوره

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