Əsas məzmuna keç
Dizaynın təməli

LLD-yə giriş

Tələbi siniflərə, davranışa və yoxlanıla bilən qaydalara çevir.

18 dəq · praktika daxilJava

Bir funksiyanın sərhədini, vəziyyətini və dəyişməz qaydasını müəyyənləşdir.

Bir kiçik sistemdən başlayaq

Kitabxanada kitab götürmək istəyirsən. Ekranda “Götür” düyməsi var, amma onun arxasında üç ayrı sual dayanır: kitab boşdurmu, onu kim götürür və geri qaytarıldıqda nə dəyişir? LLD bu sualları kodda aydın məsuliyyətlərə çevirir. İlk iş sinif adlarını çoxaltmaq deyil; icazəli davranışları və qadağan olunan vəziyyətləri yazmaqdır.

Bu kursda bir Java prosesi daxilində işləyən modellər qururuq. Verilənlər bazası, HTTP və çox serverli koordinasiya yalnız sərhəd kimi müzakirə olunur. Eyni obyekti iki thread istifadə edirsə, həmin obyektin kilidi kömək edə bilər. Başqa serverdəki obyektə isə bu kilid təsir etmir.

ADDIM-ADDIM GÖRAktiv borc: 0
Oxucu ASorğu yoxdur
Kitab nüsxəsiAVAILABLE
Oxucu BSorğu yoxdur
1 / 4

Boş nüsxə

Hələ heç kim kitabı götürməyib.

Qorunan qayda

Bir nüsxənin ən çox bir borcalanı var.

Əvvəl davranış, sonra struktur

Kitabın adına və müəllifinə baxmaqla borc vermə qaydasını tapmaq olmur. “Eyni nüsxə eyni anda yalnız bir oxucuda ola bilər” cümləsi isə birbaşa modelə yol göstərir: BookCopy cari borrowerId-ni saxlayır və borrow əməliyyatında boş olub-olmadığını yoxlayır. Bu, invariantdır — icazəli hər əməliyyatdan sonra doğru qalmalı qayda.

Müştəri koduna setBorrower adlı sərbəst setter vermirik. borrow və returnBy metodları niyyəti ifadə edir və keçidin şərtlərini qoruyur. Adları yaxşı seçilmiş kiçik API həm yanlış istifadənin qarşısını alır, həm də test yazmağı asanlaşdırır.

Müsahibədə nəyi göstərməlisən?

Tələbi öz sözlərinlə təkrarla və bir nümunə axını keç. Sonra səhv yolu göstər: kitab artıq başqasındadırsa nə olur? Cavab yalnız “exception ataram” deyil; əvvəlki vəziyyətin dəyişmədiyini də deməlisən.

Dizaynın gücü qutu sayında ölçülmür. Yeni tələb gələndə hansı hissənin dəyişdiyini izah edə bilmək daha faydalıdır. Məsələn, gecikmə cəriməsi əlavə ediləndə kitabın kimdə olduğunu qoruyan qaydanı yenidən yazmağa ehtiyac olmamalıdır.

  • Giriş və nəticəni dəqiqləşdir.
  • Vəziyyətin sahibini seç.
  • Qadağan keçidi testlə.
  • Saxlama və bildiriş kimi yan təsirləri sərhəddə saxla.

Model və məsuliyyətlər

BookCopy

Bir fiziki nüsxənin kimdə olduğunu qoruyur.

borrowerId
LibraryService

Nüsxəni tapır və istifadəçi sorğusunu yönləndirir.

copies
LoanPolicy

Götürmə hüququnu yoxlayan ayrıca qaydadır.

canBorrow(reader)

Java ilə əsas məntiq

Nümunə bir nüsxənin yaddaşdakı qaydasını göstərir. Giriş hüququnu və qalıcı saxlamanı xidmət sərhədində əlavə edirik.

final class BookCopy {
    private String borrower;
    synchronized boolean borrow(String reader) {
        if (reader == null || reader.isBlank())
            throw new IllegalArgumentException("reader");
        if (borrower != null) return false;
        borrower = reader;
        return true;
    }
    synchronized boolean returnBy(String reader) {
        if (borrower == null || !borrower.equals(reader)) return false;
        borrower = null;
        return true;
    }
}

Qalan 17 dərsdə davam et

Kurs pulsuzdur. Hesabında irəliləyişini saxlayaraq oxu.

Hesab yarat və başla