کریستوفر الکساندر می گوید: «هر الگو، مساله ای را توصیف می کند که به دفعات در محیط اطراف ما رخ می دهد، و سپس راه حل آن مساله را به گونه ای مطرح می کند که بتوانید از این راه حل میلیون ها بار استفاده کنید، بدون اینکه هرگز آن را دو بار به همان روش انجام دهید». با وجود اینکه الکساندر در مورد الگوها در ساختمان سازی، ساختار شهرها و خیابان ها صحبت می کرد، آنچه او می گوید در مورد الگوهای طراحی شی گرا (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 (از طریق شرکت در کلاس های آکادمی و یا مطالعه شخصی) الزامی می باشد.
صفحه مورد نظر هنوز به قالب جدید انتقال نیافته است. برای مشاهده نسخه قدیم کلیک کنید.