[Timur Shemsedinov] π‘ ΠΠΎΠΌΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΠΈ ΡΡΡΡΠΊΡΡΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ, ΡΠΎΠΊΡΡΡΠΈΠ΅ β ΠΠΠ ΠΈ ΡΠΈΠΏΡ Π² JavaScript / TepeScript
π https://nodeua.com/Patterns-2025 β«οΈ Nominal Typing - ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ ΡΠΈΠΏΠΎΠ²/ΠΊΠ»Π°ΡΡΠΎΠ²/ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. User { name: string } β Department { name: string } β«οΈ Structural Typing - ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΈΠ»ΠΈ ΡΠΎΡΠΌΠΎΠΉ (ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ°ΠΊ Π² JS/TS). User { name: string } β‘ Department { name: string } β«οΈ Encapsulation - ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΎΠ΄Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ (Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ², Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ). Counter { value, inc() } β«οΈ Hiding - ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Counter { #value, inc(), get value() } β«οΈ Structural Composition - ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΡΡΠ»ΠΊΠΎΠΊ Π² ΠΏΠΎΠ»Ρ, Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΌ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Car { engine: Engine, wheels: Wheels[] } β«οΈ Aggregation - ΡΠ»Π°Π±Π°Ρ ΡΠΎΡΠΌΠ° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. AggregateError { errors: [Error, Error, Error] } β«οΈ Delegation - Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. Semaphore { #counter: Counter, get count(), enter(), leave() } π Code snippets: https://github.com/tshemsedinov/feed/blob/main/README.md#structural-approach-2025-10-31
ΠΎΡΠΊΡΡΡΡ Π±ΠΎΡ

