دوره استفاده از Design Pattern ها در طراحی Domain Model پروژه های DDD

  • دسته بندی
    طراحی نرم افزار
  • مدت دوره
    45 ساعت
  • جلسات دوره
    15 جلسه 3 ساعته
  • نحوه برگزاری
    آنلاین
  • تاریخ شروع
    4 مرداد 1401
  • هزینه دوره
    3.000.000 تومان
  • ثبت نام
  • معرفی دوره
    کریستوفر الکساندر می گوید: «هر الگو، مساله ای را توصیف می کند که به دفعات در محیط اطراف ما رخ می دهد، و سپس راه حل آن مساله را به گونه ای مطرح می کند که بتوانید از این راه حل میلیون ها بار استفاده کنید، بدون اینکه هرگز آن را دو بار به همان روش انجام دهید». با وجود اینکه الکساندر در مورد الگوها در ساختمان سازی، ساختار شهرها و خیابان ها صحبت می کرد، آنچه او می گوید در مورد الگوهای طراحی شی گرا (OO Design Patterns) نیز صادق است. الگوهای طراحی شیء گرا، توصیفی از ساختار Class ها و تعامل Object ها هستند که برای حل یک مشکل طراحی عمومی مطرح شده اند که میتوان از آنها در حل یک مساله خاص استفاده کرد و یا آنها را برای حل یک مساله خاص سفارشی سازی کرد.
    احتمالا بارها شنیده اید که الگوهای طراحی، مباحث صرفا تئوری و آکادمیک هستند و در پروژه های واقعی و روزمره کاربرد ندارند. اگر شما نیز این احساس را دارید، احتمالا نظر شما بعد از شرکت در این دوره تغییر خواهد کرد. الگوها می توانند بسیار کاربردی، عملی و در توسعه روزمره بسیار مفید باشند. برخی از الگوهای طراحی، میتوانند در طراحی Domain Model بسیار کاربردی باشند و به شما در رسیدن به طراحی یک Model قابل توسعه، قابل نگهداری و تست پذیر کمک کنند. در این دوره قصد داریم، به بررسی این الگوهای طراحی و نحوه استفاده از آنها در طراحی Domain Model در پروژه های DDD بپردازیم.
  • مروری بر برخی مفاهیم Domain-Driven Design
    • Domain
    • Domain Model
    • Ubiquitous Language
    • Model-Driven Design
      • Entity
      • Value Object
      • Aggregate / Aggregate Root
      • Domain Service
      • Factories
      • Repositories
  • Commonality and Variability Analysis
    • بررسی مفهوم Commonality و Variability
    • اصل Variation Isolation
    • بررسی Perspective های مختلف
      • Conceptual
      • Specification
      • Implementation
    • Commonality Analysis
      • Deductive Commonality
      • Inductive Commonality
    • بررسی ابعاد Commonality
      • Structure
      • Behavior
      • Algorithm
    • Variability Analysis
      • Positive Variability
      • Negative Variability
  • مفهوم و کاربرد Design Pattern ها
    • مروری بر تاریخچه الگوها در طراحی نرم افزار
    • تعریف الگوهای طراحی
    • سطوح مختلف الگوها در نرم افزار
      • Architectural Patterns
      • Design Patterns
      • Implementation Patterns
    • اجزا مختلف در تعریف یک الگو
      • Context
      • Problem
      • Forces
      • Solution
    • نگاهی بر دسته بندی Design Pattern از نگاه GoF
      • Creational
      • Behavioral
      • Structural
  • الگوی Composite
    • بررسی الگوی Composite
    • مساله Transparency و Safety در الگوی Composite
    • ترکیب الگوی Chain of Responsibility با Composite
    • بهینه سازی استفاده از حافظه در ساختارهای Composite با الگوی Flyweight
    • تسهیل پیمایش ساختارهای Composite با الگوی Iterator
    • تجمیع داده ها از ساختارهای Composite با الگوی Visitor
  • الگوی Specification
    • بررسی الگوی Specification
    • Hard Coded Specification
    • Parameterized Specification
    • ترکیب الگوی Specification و Composite
    • Partially Satisfied Specification
    • بررسی Subsumption
      • شناسایی Generalization با Subsumption ها
      • شناسایی Special Case با Subsumption ها
  • الگوی Strategy
    • بررسی الگوی Strategy
    • آشنایی با مفهوم Policy
    • بحث Awareness در Client های الگوی Strategy
    • روش های ارتباط بین Context و Strategy ها
    • استفاده از Strategy های Generic
    • Optional Strategy
    • ترکیب الگوی Flyweight و Strategy
  • الگوی State
    • بررسی Pattern State
    • تعریف State-Specific Behavior
    • روش های ارتباط بین Context و State ها
    • روش های پیاده سازی State Transition ها
      • پیاده سازی Transition ها در Context
      • پیاده سازی Transition ها داخل State ها
    • رویکرد Table-driven در پیاده سازی State Pattern
    • الگوی State از زاویه اصل LSP و OCP
    • ترکیب الگوی Flyweight و State
    • ترکیب الگوی Singleton و State
  • الگوی Visitor
    • نگاهی بر برخی انواع Visitor
      • Reflective Visitor
      • Acyclic Visitor
      • Extrinsic Visitor
  • الگوی Abstract Factory
    • بررسی الگوی Abstract Factory
    • نگاهی بر مساله OCP در استفاده از الگوی Abstract Factory
    • استفاده از الگوی Singleton در پیاده سازی Abstract Factory
    • استفاده از Factory Method ها در پیاده سازی Abstract Factory
    • رویکرد Prototype-based در پیاده سازی Abstract Factory
  • الگوی Builder
    • بررسی الگوی Builder
    • تعریف مفهوم Representation
    • انواع Builder
    • پیاده سازی Chaining Methods و Fluent API برای Builder ها
    • Step Builders
    • استفاده از Builder برای ساخت ساختارهای Composite
  • الگوی Prototype
    • بررسی الگوی Prototype
    • روش های پیاده سازی Clone
      • Shallow Copy
      • Deep Copy
    • بررسی کاربرد Prototype Manager و نحوه پیاده سازی آن
  • الگوی Adapter
    • بررسی الگوی Adapter
    • Pluggable Adapters
    • Two-way Adapters
    • روش های پیاده سازی الگوی Adapter
      • Class Adapter
      • Object Adapter
  • الگوی Template Method
    • بررسی الگوی Template Method
    • مفهوم Primitive Operations
    • الگوی Template Method و The Hollywood Principle
    • استفاده از Hook Method ها جهت افزایش Extensibility
    • استفاده از Factory Method ها در الگوی Template Method
  • الگوی Flyweight
    • بررسی الگوی Flyweight
    • بررسی مفاهیم Intrinsic / Extrinsic state
  • الگوی Chain of Responsibility
    • بررسی الگوی Chain of Responsibility
    • مفهوم Implicit Receiver
    • الگوی Chain of Responsibility از زاویه اصل OCP
    • پیاده سازی End of Chain و الگوی Null Object
    • ساخت Chain با الگوی Builder
    • استفاده از الگوی Template Method جهت Automatic Forwarding
    • روش های پیاده سازی Request
      • Hard-Coded Operation
      • Request Code
    • روش های پیاده سازی Successor Chain
      • New Links
      • Existing Links
    • ترکیب الگوی Chain of Responsibility و Composite
  • الگوی Iterator
    • بررسی الگوی Iterator
    • بررسی مفهوم Polymorphic Iteration
    • بررسی انواع Iterator ها
      • Internal Iterator
      • External Iterator
    • بررسی Cursor Iterator ها
    • بررسی مساله تغییر در Collection و مفهوم Robust Iterator
    • ترکیب الگوی Iterator و Composite
      • به صورت Internal Iterator
      • به صورت External Iterator
    • استفاده از Null Object جهت پیاده سازی Null Iterator
    • نگهداری State مربوط به Iteration با الگوی Memento
  • الگوی Observer
    • بررسی الگوی Observer
    • مروری بر مفهوم Publish / Subscribe
    • مفهوم Multicasting و Unicasting
    • بررسی Push Model و Pull Model و تفاوت آنها
    • پیاده سازی Observer به دو روش Push & Pull
    • روش های پیاده سازی Subject-Observer Mapping
      • نگهداری Reference در Subject
      • استفاده از Look-up
    • ترکیب الگوی Template Method و Observer
    • Change Manager
      • بررسی مفهوم Change Manager و کاربرد آن در الگوی Observer
      • وظایف Change Manager
      • بررسی انواع Change Manager (Simple, DAG)
      • استفاده از الگوی Mediator و Singleton در پیاده سازی Change Manager
  • الگوی Factory Method
    • بررسی الگوی Factory Method
    • بررسی Simple Factory و تفاوت آن با Factory Method
    • روش های پیاده سازی Factory Method
      • Abstract Creator
      • Concrete Creator
    • Parameterized factory methods
    • بررسی ارتباط الگوی Factory Method و LSP
    • بررسی ارتباط الگوی Factory Method و OCP
    • استفاده از Factory Method ها در الگوی Template Method
  • الگوی Null Object
    • بررسی مشکلات مقادیر Null
    • الگوی Null Object
    • Maybe Monad
  • ساخت Building Block ها با الگوهای Creational
    • بررسی نقش Factory ها در Domain
    • روش های مختلف پیاده سازی Factory ها در Domain
    • پیاده سازی Factory Method برای ساخت Aggregate ها
    • الگوی Prototype در Domain Model
      • ساخت Aggregate در مسائل نیازمند Aggregate Template
      • Clone کردن Value Object ها
    • الگوی Builder در Domain
      • ساخت Aggregate ها با الگوی Builder
      • پیاده سازی Fluent Builder
      • استفاده از Step Builder برای ساخت Aggregate ها
    • الگوی Abstract Factory در Domain
      • ساخت Policy های هم¬رده با Abstract Factory
  • اعمال Validation، Selection و کنترل Invariant ها با الگوی Specification
    • مساله تنوع و ترکیب Business Rule ها در Domain Model
    • نحوه استفاده از Specification ها و Composite Specification در کنترل Invariant ها
    • پیاده سازی Factory جهت ساخت Specification ها
    • پیاده سازی انواع Specification و Subsumption ها
    • بررسی مساله Building-to-Order و استفاده از Specification ها به این منظور
    • تفکیک الگوریتم ها و Policy ها متفاوت از فرآیندهای اصلی با الگوی Strategy
    • استفاده از الگوی Null Object جهت پیاده سازی Strategy های خنثی
    • استفاده از الگوی Template Method در یاده سازی الگوریتم ها و Policy های متفاوت با مراحل یکسان
    • استفاده از الگوی Visitor جهت پیاده سازی منطق های متفاوت در ساختارهای بزرگ
  • طراحی ساختارهای درختی و Part-Whole در Domain Model
    • بررسی روش های طراحی ساختارهای درختی در Domain Model
      • در قالب یک Aggregate
      • در قالب Aggregate های جدا
    • استفاده از الگوی Composite برای طراحی ساختارهای درختی
    • بررسی مساله Reference-By-Id و دسترسی به Element های درخت
    • تجمیع داده ها از ساختارهای درختی با الگوی Visitor
    • تغییر در ساختار درخت با الگوی Visitor
    • توزیع وظایف در ساختار درختی با الگوی Chain of Responsibility
    • بهینه سازی استفاده از حافظه با الگوی Flyweight
    • دسترسی به Element های درخت با الگوی Iterator
  • مدیریت State و طراحی State Machine در Domain Model
    • طراحی State Machine داخل Entity ها
    • طراحی رفتارهای وابسته به State با State Pattern
    • طراحی State Machine با State Pattern
    • نگاهی بر Explicit State Modeling
    • بررسی الگوی Entity Relay در طراحی State ها
  • تاریخچه داده ها در Domain Model
    • نگاهی بر نیاز وجود تاریخچه داده ها و حرکت در زمان
    • نگاهی بر Event Sourcing
    • مدیریت تغییرات داده ها در Event Sourced Aggregates
    • مدیریت تغییرات داده ها در Aggregate های غیر Event Sourced
      • بررسی Temporal Patterns (مانند Temporal Property, Temporal Objects و ... )
      • بررسی مفهوم Trail و الگوی Audit Trail
      • بررسی مفهوم Snapshot
      • پیاده سازی Audit Trail در Aggregate ها
    • بررسی الگوی Memento برای بازگشت به بازه های قبلی تغییرات
  • Iteration در Building Block ها
    • بررسی مشکل وابستگی به ساختار Aggregate ها در Iteration ها
    • بررسی نیاز به تغییر الگوریتم در پیمایش ساختارهای داده ای
    • بررسی نیاز به Polymorphic Iteration و نحوه پیاده سازی آن
    • بررسی پیاده سازی الگوی Iterator در زبان های مختلف
      • Iterator ها در زبان Java
      • Enumerable ها در زبان #C
  • اطلاع از تغییر State در Object ها
    • بررسی اهمیت و نیاز به اطلاع از تغییرات در Domain Object ها
    • Domain Event ها و نحوه پیاده سازی آن
    • بررسی الگوی Event Aggregator
    • بررسی الگوی Observer
  • الگوها در طراحی ACL ها
    • بررسی نیاز به Translation و Communication در ACL ها
    • نقش الگوی Adapter در پیاده سازی ACL ها
    • نقش الگوی Facade در پیاده سازی ACL ها
    • بررسی نقش Translator در ACL و تفکیک آن از Adapter ها
  • مباحث دوره در تمام زبان های برنامه نویسی شیءگرا قابل استفاده می باشند و مباحث و کدهای مطرح شده، وابستگی به زبان و یا پلتفرم خاصی ندارند. پیاده سازی مباحث این دوره در کلاس با زبان #C صورت میگیرد اما به دلیل عدم وابستگی به زبان، برنامه نویسان با تخصص در همه زبان های شیءگرا میتوانند در این دوره شرکت کنند.
  • تسلط به مفاهیم DDD
    در این دوره قصد داریم از Design Pattern ها در طراحی Domain Model پروژه های DDD استفاده کنیم، به همین دلیل تسلط بر مفاهیم DDD (از طریق شرکت در کلاس های آکادمی و یا مطالعه شخصی) الزامی می باشد.