
Programmalıq injiniringge kirisiw / 11-ameliy PI_K
.pdf11-ámeliy sabaq. Qosımsha shegaraların (programmalıq ekosistema) belgilew.
Jumıstıń maqseti:
Ámeliy sabaqtıń maqseti - studentlerge programmalıq támiynat qosımshalarınıń shegaraların anıqlaw, programmalıq ekosistemanı túsiniw hám onıń komponentlerin qosımsha islep shıǵıw processinde belgilew bilimlerin úyretiw. Sabaqta studentler programmalıq ekosistemanıń tiykarǵı komponentleri, olardıń baylanısları hám óz-ara qatnasları menen tanısadı. Nátiyjede, studentler programmalıq támiynat qosımshaların proektlestiriw hám rawajlandırıw processinde ekosistema komponentlerin durıs belgilewdi hám olardıń arasındaǵı baylanıslardı optimallastırıw kónikpelerin qáliplestiredi.
Ámeliy bólim:
Programmalıq ekosistema túsinigi hám onıń áhmiyeti
Programmalıq ekosistema - bul programmalıq támiynat qosımshasınıń funkcionallıǵın támiyinlew ushın óz-ara baylanısqan komponentlerdiń jıyındısı. Bul komponentlerge ózińizdiń qosımshańız, sırtqı servisler, API, maǵlıwmatlar bazaları, infrastrukturalar, keyingi tárepli kitapxanalar hám basqalar kiredi. Ekosistema túsinigi biotik hám abiotik faktorlardıń kompleksli óz-ara baylanısına iye bolǵan tábiyiy ekosistemaǵa usaǵan belgili bir ortalıqtı payda etiw principine tiykarlanǵan.
Programmalıq ekosistemanıń áhmiyeti:
1.Anıqlıq: Sistema komponentleriniń anıq shegaraların belgilew, olardıń juwapkershilikli hám óz-ara baylanısların ornatıw múmkinshiligi beredi.
2.Masshtablanıw: Anıq shegaralarǵa iye bolǵan sistema komponentlerin qosıw, óshiriw yamasa modifikaciyalaw jolları menen masshtablanıwı ańsat.
3.Texnikalıq xızmet kórsetiw: Sistema komponenti izolyaciyalanǵan bolsa, onı basqa komponentlerge zıyan keltirmesten ózgertiw yamasa jańartıw múmkin.
4.Ónimlilik: Vertikal hám gorizontal masshtablanıw esabınan ónimlilik optimallastırıladı.
Programmalıq qosımsha shegaraların belgilew
Programmalıq qosımsha shegaraların belgilew processi kompleksli hám kóp aspektli process. Bul process tiykarınan, sistema komponentleriniń funkcionallıq juwapkershilikleri, olardıń óz-ara qatnasları hám interfeyslerin anıqlawdı óz ishine aladı.
Qosımsha shegaraların belgilew ushın tómendegi basqıshlardı orınlaw zárúr:
Sistemanıń maqsetleri hám talapların anıqlaw
Birinshi adım sistemanıń ulıwma maqsetlerin hám oǵan qoyılatuǵın talaplardı anıqlaw. Bul adımda tómendegi sorawlarǵa juwap beriw kerek:
Qosımsha qanday funkciyalardı atqaradı?
Qosımshanıń tiykarǵı paydalanıwshıları kimler?
Qanday funkcionallıq talaplar bar?
Isenimlilik, ónimlilik hám masshtablanıw sıyaqlı funkcionallıq emes talaplar qanday?
Sistemanı domen oblastları boyınsha bóliw
Sistemanı domen oblastlarına bóliw - bul domenge-baǵdarlanǵan dizayn (DomainDriven Design, DDD) principleri tiykarında ámelge asırıladı:
1.Sheklengen kontekstler (Bounded Contexts): Model anıqlamalarınıń,
ózgeshelikleri hám qollanıw oblastlarınıń shegaraların belgilew. Mısalı, "paydalanıwshı" túsinigi ayırım sistemalarda hár qıylı bolıwı múmkin: onlayn dúkanda bul satıp alıwshı, al CRM sistemasında - klient.
2.Domen modeller: Hár bir kontekst ushın domen model dúziw. Bul model kontekst sheńberinde áhmiyetli bolǵan túsiniklerdi óz ishine aladı.
3.Kontekstler arasındaǵı qatnasıqlar: Mısalı, "Klientler" konteksti menen "Buyırtpalar" konteksti arasındaǵı qatnasıqlar.
Qatlamlanǵan arxitektura qollanıw
Qatlamlanǵan arxitektura sistemanı gorizontal dárejedegi logikalıq qatlamlarǵa bóliw menen sistemanıń tiykarǵı shegaraların belgilewge múmkinshilik beredi:
1.Prezentaciya qatlamı: Paydalanıwshı interfeysi, maǵlıwmatlardı kórsetiw hám paydalanıwshı háreketlerin qayta islew. Mısalı, veb-interfeys, mobil qosımsha.
2.Qollanba (Application) qatlamı: Biznes logika, qosımsha xızmetleri hám processler. Mısalı, servisler, utilitalar, biznes logika klassları.
3.Domen qatlamı: Biznes túsiniklerin saqlaytuǵın modeller. Mısalı, domen subektleri.
4.Infrastruktura qatlamı: Maǵlıwmatlar menen islesiw. Mısalı, maǵlıwmatlar bazasına integraciya, sırtqı API menen islesiw.
//Domen modeli mısalı
public class Product { private String id; private String name; private BigDecimal price;
private String description; private ProductCategory category;
//Konstruktor, getterler hám setterler
//Biznes logika metodları
public boolean isAvailable() {
// Ónimnіń qoljetimliligin tekseriw logikası
}
public void applyDiscount(double discountPercentage) { // Jeńillik qollanıw logikası
}
}
Programmalıq ekosistema komponentleri
Programmalıq ekosistema quramına tiykarınan tómendegi komponentler kiredi:
Yadro (Core)
Sistemanıń oraylıq bólimi, ol negizgi biznes logikanı hám domenge tiyisli funkcionallıqtı óz ishine aladı. Yadro modulleri:
// Yadro moduli mısalı package com.example.core;
public interface ProductService { Product getProductById(String id);
List<Product> getProductsByCategory(ProductCategory category);
void createProduct(Product product); void updateProduct(Product product); void deleteProduct(String id);
}
Sırtqı API
Basqa sistemalar hám servisler menen integraciya ushın xızmet etedi. API tiykarınan HTTP protokolı arqalı ámelge asırıladı (REST, GraphQL):
// REST API mısalı @RestController @RequestMapping("/api/products") public class ProductController {
private final ProductService productService;
@Autowired
public ProductController(ProductService productService) { this.productService = productService;
}
@GetMapping("/{id}")
public ResponseEntity<Product> getProduct(@PathVariable String id) {
Product product = productService.getProductById(id); return ResponseEntity.ok(product);
}
@PostMapping
public ResponseEntity<Product> createProduct(@RequestBody Product product) {
productService.createProduct(product); return
ResponseEntity.status(HttpStatus.CREATED).body(product);
}
// Basqa metodlar...
}
Maǵlıwmatlar qatlamı
Maǵlıwmatlardı saqlaw, maǵlıwmatlar bazasına qatnaslar hám maǵlıwmatlar menen operaciyalar ámelge asırıladı:
// Maǵlıwmatlar qatlamı mısalı
@Repository
public class ProductRepositoryImpl implements ProductRepository
{
private final JdbcTemplate jdbcTemplate;
@Autowired
public ProductRepositoryImpl(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate;
}
@Override
public Product findById(String id) {
String sql = "SELECT * FROM products WHERE id = ?"; return jdbcTemplate.queryForObject(sql, new
Object[]{id}, new ProductRowMapper());
}
// Basqa metodlar...
}
Infrastrukturalıq komponentler
Sistemanıń tiykarǵı infrastrukturasın támiyinleytuǵın komponentler: serverler, maǵlıwmatlar bazaları, keshlew, tarmaqlar hám t.b.:
// Kesh konfiguraciyası mısalı
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() { SimpleCacheManager cacheManager = new
SimpleCacheManager();
List<Cache> caches = new ArrayList<>(); caches.add(new ConcurrentMapCache("products")); caches.add(new ConcurrentMapCache("categories")); cacheManager.setCaches(caches);
return cacheManager;
}
}
Integraciyalıq komponentler
Sırtqı servisler hám sistemalar menen integraciyanı támiyinleytuǵın komponentler. Mısalı, tólem sistemaları, elektron pochta sistemaları, xabarlar menen almasıw hám basqalar:
// Tólem sisteması menen integraciya mısalı
@Service
public class PaymentServiceImpl implements PaymentService {
private final RestTemplate restTemplate; private final String paymentApiUrl;
@Autowired
public PaymentServiceImpl(RestTemplate restTemplate, @Value("${payment.api.url}") String
paymentApiUrl) {
this.restTemplate = restTemplate; this.paymentApiUrl = paymentApiUrl;
}
@Override
public PaymentResult processPayment(PaymentRequest request)
{
return restTemplate.postForObject(paymentApiUrl + "/process", request, PaymentResult.class);
}
}
Programmalıq ekosistema shegaraların anıqlaw
Programmalıq ekosistema shegaraların anıqlaw ushın tómendegi principlerdi qollanıw kerek:
Sheklem modulyarizaciya (Bounded Modularity)
Hár bir modul yamasa komponent anıq shegarlar menen belgilengen bolıwı kerek. Bunda:
1.Joqarı kogeziya (High Cohesion): Komponent birdey funkcionallıqtı támiyinleytuǵın klasslardı óz ishine alıwı tiyis.
2.Tómen baylanıs (Low Coupling): Komponent basqa komponentlerge minimal ǵárezli bolıwı kerek.
//Joqarı kogeziya mısalı
//Barlıq inventarizaciya logikası bir pakette
package com.example.inventory;
public class InventoryService {
private InventoryRepository repository;
// Inventarizaciya menen baylanıslı logikası
}
public class InventoryRepository {
// Inventarizaciya maǵlıwmatların saqlaw
}
public class StockLevel {
// Inventarizaciya deńgeylerini anıqlaw
}
API kontraktları
Komponentler arasındaǵı óz-ara háreketlesiw API kontraktları arqalı anıq belgileniwi kerek. Bunda komponentler arasındaǵı óz-ara háreketlesiw usılları, parametrleri hám nátiyjeleri anıq bolıwı kerek.
// API kontrakt mısalı package com.example.api;
public interface OrderService { /**
*Jańa buyırtpa jaratadı
*@param order Buyırtpa maǵlıwmatları
*@return Jaratılǵan buyırtpanıń ID-si
*@throws OrderValidationException eger buyırtpa durıs formatta bolmasa
*/
String createOrder(Order order) throws OrderValidationException;
/**
*Buyırtpa statusın aladı
*@param orderId Buyırtpa ID-si
*@return Buyırtpa statusı yaki null eger buyırtpa tabılmasa
*/
OrderStatus getOrderStatus(String orderId);
// Basqa metodlar...
}
Waqıyaǵa tiykarlanǵan óz-ara háreketlesiw (Event-Driven)
Komponentler arasındaǵı óz-ara háreketlesiw waqıya mexanizmleri arqalı ámelge asırılsa, komponentler arasındaǵı tikkeley baylanıslar azaytıladı.
//Waqıyaǵa tiykarlanǵan óz-ara háreketlesiw mısalı
//Waqıyaǵa jaratıwshı komponent
@Service
public class OrderServiceImpl implements OrderService {
private final ApplicationEventPublisher eventPublisher;
@Autowired
public OrderServiceImpl(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
@Override
public String createOrder(Order order) {
//Buyırtpanı jaratıw logikası
String orderId = generateOrderId(); order.setId(orderId);
//Buyırtpa jaratılǵanı haqqında oqıyǵa jariyalaw eventPublisher.publishEvent(new
OrderCreatedEvent(order));
return orderId;
}
}
// Waqıya tıńlawshı komponent @Component
public class InventoryUpdateListener {
private final InventoryService inventoryService;
@Autowired
public InventoryUpdateListener(InventoryService inventoryService) {
this.inventoryService = inventoryService;
}
@EventListener
public void handleOrderCreatedEvent(OrderCreatedEvent event)
{
Order order = event.getOrder();

// Buyırtpa jaratılǵannan keyin inventarizaciyanı
jańartıw
inventoryService.updateInventory(order.getItems());
}
}
Programmalıq ekosistema mısalı: E-commerce sistema
Tómende elektron dúkan ekosistemasınıń mısalı keltirilgen:
1. Yadro komponentler:
o Ónimlerdi basqarıw
o Buyırtpalardı basqarıw
oPaydalanıwshılardı basqarıw
2.Sırtqı API komponentler:
oRESTful API ónimler ushın
oRESTful API buyırtpalar ushın
oWebSocket sessiyalar ushın
3.Maǵlıwmatlar qatlamı komponentleri:
oÓnimler maǵlıwmatlar bazası
o Buyırtpalar maǵlıwmatlar bazası
oPaydalanıwshılar maǵlıwmatlar bazası
4.Infrastruktura komponentleri:
oKeshlew sisteması
oQollap quwatlaw sisteması
oMonitoring sisteması
5.Integraciyalıq komponentler:
oTólem sisteması integraciyası
o Jetkerip beriw sisteması integraciyası o Email xabarlandırıw sisteması
Bul komponentler arasındaǵı baylanıslar API kontraktları hám waqıyalar arqalı anıq belgilenedi.
Ámeliy tapsırmalar:
Tapsırma 1: Onlayn oqıtıw platforması ekosistemasın jobalaw
Onlayn oqıtıw platforması ushın programmalıq ekosistema shegaraların anıqlań. Platforma tómendegi funkciyalarǵa iye bolıwı kerek:
Kurslardı basqarıw (jaratıw, redakciyalaw, óshiriw)
Paydalanıwshılardı basqarıw (dizimge alıw, autentifikaciya, avtorizaciya)
Video materiallardı júklew hám kóriw
Tapsırmalardı jaratıw hám orınlaw
Progressti baqlaw hám statistika
Zárúr:
1.Sistemanıń tiykarǵı domenlerin belgileń
2.Hár bir domen ushın model klassların jazıń
3.Komponentler arasındaǵı API kontraktların anıqlań
4.Waqıyaǵa tiykarlanǵan óz-ara háreketlesiw mexanizmin usınıs etiń
5.Sırtqı integraciyalar múmkinshiliklerin anıqlań (mısalı, tólem sisteması, elektron pochta)
Tapsırma 2: E-commerce qosımshası shegaraların implementaciya qılıw
E-commerce qosımshası ushın tómendegi komponentler arasındaǵı shegaralardı anıqlań hám implementaciya qılıń:
Ónimler katalogı (Product Catalog)
Sebet (Shopping Cart)
Buyırtpalar (Orders)
Hár bir komponent ushın:
1.Domen modellerin jazıń
2.API interfeyslerin dúziń
3.Komponentler arasındaǵı oqıyǵalardı anıqlań
4.Maǵlıwmatlar qatlamı menen integraciyanı jazıń
//Mısalı ónimler katalogı komponenti ushın domen modelleri public class Product {
private String id; private String name; private BigDecimal price;
private String description;
private ProductCategory category; // Getterler, setterler...
}
// API interfeysi
public interface ProductCatalogService { Product getProductById(String id);
List<Product> getProductsByCategory(ProductCategory category);
void createProduct(Product product); // Basqa metodlar...
}
// Oqıyǵa klassı
public class ProductCreatedEvent { private final Product product;
public ProductCreatedEvent(Product product) { this.product = product;
}
public Product getProduct() { return product;
}
}
Tapsırma 3: Mikrosevisler arxitekturasındaǵı ekosistema shegaraları
Mikroservisler arxitekturası tiykarında sayaxat buyırtpa qosımshasınıń tómendegi servisler arasındaǵı shegaraların hám óz-ara qatnasların anıqlań:
Paydalanıwshılar servisi
Miymanxana izlew servisi
Avia biletler servisi
Buyırtpalar servisi
Tólem servisi
Zárúr:
1.Hár bir servis ushın API kontraktın anıqlań (REST yaki GraphQL)
2.Servisler arasındaǵı sinxron hám asinxron baylanıslardı belgileń
3.Waqıyaǵa tiykarlanǵan óz-ara háreketlesiwlerdi dúziń
4.Maǵlıwmatlar izolyaciya strategiyasın usınıs etiń (hár bir servis ushın óz maǵlıwmatlar bazası yamasa ulıwma maǵlıwmatlar bazası)
5.API Gateway sxemasın dúziń
Nátiyje retinde, arxitekturalıq diagramma hám tiykarǵı komponentler menen óz-ara qatnaslardıń qısqasha táriypin dúziń.