Bosh sahifa Wiki Dependency

Dependency

Dependency — bir dasturiy komponent ishlashi, build qilinishi yoki testdan o‘tishi uchun tayanadigan boshqa komponent, xizmat yoki resurs.

Dependency library, package, runtime, database, API, compiler, operatsion tizim yoki configuration bo‘lishi mumkin.

Dependency tizimlar orasida bog‘lanish yaratadi. Bu qayta foydalanishni oshiradi, ammo versiya, xavfsizlik va mavjudlik risklarini ham olib keladi.

Direct dependency

Loyiha manifestida bevosita ko‘rsatilgan package direct dependency.

Masalan, application HTTP client libraryni to‘g‘ridan-to‘g‘ri import qiladi.

Developer uning API va versiya constraintini nazorat qiladi.

Transitive dependency

Direct dependency o‘zi boshqa package’ga tayanadi.

Bu transitive dependency.

Application uni source’da import qilmasligi mumkin, ammo:

ga ta’sir qiladi.

Dependency tree butun graph bilan tahlil qilinadi.

Build dependency

Faqat build jarayonida kerak:

Production artifact ichiga kirmasligi mumkin.

Build dependency ham supply-chain code execution huquqiga ega bo‘lishi mumkin.

Runtime dependency

Dastur bajarilganda kerak:

Build muvaffaqiyatli bo‘lsa ham runtime dependency yo‘q bo‘lsa dastur ishlamaydi.

Optional dependency

Ma’lum feature uchun kerak, asosiy ish uchun shart emas.

Package manager optional dependency o‘rnatilmasa package ishlashda davom etishini nazarda tutishi mumkin.

Kod feature mavjudligini tekshiradi.

Peer dependency

Ba’zi ekotizimda plugin host applicationdan ma’lum package versiyasini taqdim etishni kutadi.

Bu bir libraryning ikki nusxasi yuklanishini oldini olishi mumkin.

Peer constraint mos kelmasa install warning yoki xato beradi.

Development dependency

Test, lint, documentation va local development uchun kerak.

Production deploymentda olib tashlanishi mumkin.

Biroq server runtime’da migration yoki build bajarilsa ayrim development tool amalda kerak bo‘lib qolishi mumkin.

Dependency graph

Componentlar directed graph hosil qiladi.

Application
├── Library A
│   └── Library C
└── Library B
    └── Library C

Resolver C uchun barcha constraintlarga mos version tanlaydi.

Graphda cycle package yoki module darajasida muammo tug‘dirishi mumkin.

Version constraint

Dependency versiyasi:

bilan belgilanadi.

Juda keng constraint kutilmagan breaking update, juda tor constraint update va security patchni qiyinlashtiradi.

Lock file

Resolver tanlagan aniq versiyalar lock file’da saqlanadi.

U:

ni beradi.

Manifest va lock file birga ishlaydi.

Diamond dependency

A va B bir xil C dependency’ning turli versiyasini talab qiladi.

Resolver:

  • bitta umumiy version;
  • ikki nusxa;
  • conflict;
  • nearest version

siyosatidan foydalanishi mumkin.

Native libraryda ikki ABI versiyani bir processga yuklash murakkab.

Dependency injection

Object o‘z dependency’sini ichkarida yaratmay, tashqaridan qabul qiladi.

OrderService(PaymentGateway gateway)

Bu:

  • test;
  • configuration;
  • implementation almashtirish;
  • lifecycle

ni soddalashtiradi.

Dependency injection package dependency managementdan boshqa darajadagi tushuncha.

Inversion of Control container

Container constructor va registration asosida object graph yaratadi.

U:

  • singleton;
  • scoped;
  • transient;
  • factory;
  • disposal

lifecycle’larini boshqarishi mumkin.

Yashirin service locator dependency’ni code signature’dan yo‘qotadi.

External service dependency

Microservice boshqa service’ga tayanadi.

Bu dependency:

ga ega.

Retry va circuit breaker barcha operatsiya uchun avtomatik to‘g‘ri emas.

Temporal coupling

Componentlar ma’lum tartibda ishga tushishi yoki chaqirilishi kerak bo‘lsa temporal dependency mavjud.

Masalan:

  1. config yuklash;
  2. connection ochish;
  3. query bajarish;
  4. close.

API state machine yoki lifecycle orqali tartibni aniq qiladi.

Dependency pinning

Aniq version yoki commit pin qilinadi.

Afzalligi — reproducibility.

Kamchiligi — eski security patchda qolish.

Avtomatik update bot yangi versiyani test bilan taklif qilishi mumkin.

Vendoring

Dependency source yoki binary nusxasi repository ichiga olinadi.

Afzalliklari:

Kamchiliklari:

  • update qo‘lda;
  • repository hajmi;
  • upstream o‘zgarishdan uzilish;
  • license tracking.

Supply-chain xavfi

Dependency install yoki build paytida code bajarishi mumkin.

Xavflar:

  • account takeover;
  • zararli release;
  • typosquatting;
  • dependency confusion;
  • compromised build;
  • hijacked domain;
  • unsigned artifact.

Himoya ko‘p qatlamli bo‘ladi.

SBOM

Software Bill of Materials artifact ichidagi component va versionlar ro‘yxati.

Security hodisasida qaysi tizim zaif dependency ishlatayotganini topishga yordam beradi.

SBOM mavjudligi dependency xavfsizligini o‘zi kafolatlamaydi.

License dependency

Transitive package litsenziyasi application tarqatish shartlariga ta’sir qilishi mumkin.

License scanner:

  • copyleft;
  • attribution;
  • proprietary cheklov;
  • dual license

ni aniqlaydi.

Huquqiy talqin alohida ekspertiza talab qilishi mumkin.

Dependency reduction

Har dependency qo‘shimcha:

yukini olib keladi.

Kichik umumiy amal uchun katta package qo‘shishdan oldin haqiqiy qiymat baholanadi.

Biroq muhim cryptography kabi sohani qayta yozish ham xavfli.

Update

Dependency update’da:

tekshiriladi.

Major update alohida bosqichda, patch update avtomatikroq jarayonda bajarilishi mumkin.

Diagnostika

Dependency muammosida:

tekshiriladi.

Error ko‘rsatayotgan package asl sabab bo‘lgan yuqoriroq dependency orqali kelgan bo‘lishi mumkin.

Bog‘liq tushunchalar

Direct dependency, Transitive dependency, Package manager, Lock file, Dependency injection, Version constraint, SBOM, Supply chain, Library, Runtime dependency