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.
Boş nüsxə
Hələ heç kim kitabı götürməyib.
Ə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.