Sapa wae sing duwe pengalaman ing pamrograman piranti lunak milih kode piranti lunak sing ditulis dening wong liya, nggunakake paramèter pangadilan adhedhasar path kariré.
Sajrone karir profesional, aku wis ngerti akeh pangembang, lan aku wis ndeleng ewonan baris kode lan nalika kudu ngevaluasi katrampilan pangembang, umume ndeleng rong faktor:
Untunge, ana sawetara dhasar utawa prinsip sing nggawe gampang dadi luwih apik ing kode.
singkatan SOLID tegese:
S: prinsip tanggung jawab tunggal
O: asas tertutup
L: Prinsip substitusi Liskov
I: Prinsip pamisahan antarmuka
D: Prinsip Inversi Dependensi
Ayo miwiti kanthi mriksa prinsip SOLID pisanan, yaiku
Kelas (utawa modul) kudu mung siji alesan kanggo ngganti, supaya bisa berkembang.
Konsep kasebut pancen gampang banget, nanging kanggo nggayuh kesederhanaan iki, jalur implementasine bisa uga rumit. Kelas kudu mung siji alesan kanggo ngganti.
Nanging kenapa?
Napa penting banget mung kudu siji alasan kanggo ngganti?
Contone, yen ana rong alasan sing beda kanggo ngganti, bisa dipikirake yen rong tim beda bisa nggarap kode sing padha amarga rong alasan sing beda. Saben kudu ngetrapake solusine dhewe, sing nalika ana basa sing dikompilasi (kayata C ++, C # utawa Java), bisa nyebabake modul sing ora kompatibel karo tim liyane utawa bagean liyane saka aplikasi kasebut.
Contone liyane, yen sampeyan nggunakake basa sing diinterpretasi, sampeyan bisa uga kudu nyoba kelas utawa modul sing padha amarga macem-macem sebab. Iki tegese luwih akeh kerja, wektu lan gaweyan kanggo ngontrol kualitas.
Ngenali siji fitur sing kudu diduweni kelas utawa modul luwih rumit tinimbang mung ndeleng dhaptar priksa kanggo mbukak tes.
Nanging ayo nyoba mikir saka sudut pandang sing kurang teknis, yaiku, coba coba analisa pangguna kelas utawa modul kita, yaiku sapa sing bakal nggunakake. Aspek dhasar sing kudu dielingi yaiku kasunyatan manawa pangguna aplikasi utawa sistem sing dikembangake sing dilayani modul tartamtu yaiku sing njaluk modifikasi. Sing dilayani bakal njaluk ganti kelas utawa modul.
Sawetara conto modul lan panggunaan:
Dadi, yen langkah pertama yaiku nggoleki aktor utawa aktor sing duwe peran interlocutor karo modul, nggandhengake individu kanthi kabeh peran bisa dadi angel. Ing perusahaan cilik, siji wong bisa main akeh peran nalika perusahaan gedhe bisa uga ana pirang-pirang wong sing duwe peran siji.
Kayane luwih wajar kanggo ngenali peran, tinimbang wong utawa pangguna.
Mulane:
Ayo ndeleng conto
Umpama kita duwe kelas Buku sing nyusun konsep buku lan fungsine.
Buku Kelas {
fungsi getTitle () {
bali "A Great Book";
}
fungsi getAuthor () {
bali "Alessandro Baricco";
}
fungsi kaca sabanjuré () {
// kaca sabanjure
}
fungsi printCurrentPage () {
kumandhang "isi kaca saiki";
}
}
Iki kelas sing normal banget. Kita duwe buku, lan kelas bisa menehi judhul, bisa menehi penulis, lan bisa terus. Pungkasan, sampeyan uga bisa nyithak kaca saiki ing layar.
Nanging, ana masalah cilik.
Mikir babagan aktor sing melu manajemen obyek Book, sapa sejatine?
Kita bisa gampang mikir babagan rong aktor ing kene: Manajemen buku (minangka perpustakaan) yaiku Mekanisme pengajuan data (kaya carane pengin ngirim konten menyang pangguna: layar, antarmuka pangguna grafis, antarmuka panganggo mung teks, bisa uga dicetak).
Mula, kita duwe rong aktor sing beda banget sing sesambungan karo kelas.
Sacara ringkes, kelas iki nggawe campuran ing antarane:
iki bisa dadi masalah amarga nglanggar prinsip tanggung jawab tunggal (SRP).
Kepiye cara ngganti, kepiye cara nambah kode iki kanggo ngurmati prinsip tanggung jawab tunggal?
Priksa kode ing ngisor iki:
Buku Kelas {
fungsi getTitle () {
bali "Oceano Mare";
}
fungsi getAuthor () {
bali "Alessandro Baricco";
}
fungsi nguripake kaca () {
// kaca sabanjure
}
fungsi getCurrentPage () {
kumandhang "isi kaca saiki";
}
}
antarmuka Printer {
fungsi printPage ($ kaca);
}
kelas StampaLibro ngleksanakake Printer {
fungsi printPages ($ kaca) {
kumandhang $ kaca;
}
}
kelas htmlPrinter ngetrapake Printer {
fungsi printPages ($ kaca) {
kumandhang ' '. $ kaca ' ';
}
}
Conto sing gampang banget iki nuduhake cara misahake presentasi saka logika bisnis, lan tundhuk karo SRP, menehi kaluwihan gedhe ing fleksibilitas proyek kita.
Ayo goleki conto liyane:
Tuladha sing padha karo ing ndhuwur yaiku nalika obyek bisa nyimpen lan njupuk saka presentasi.
Buku Kelas {
fungsi getTitle () {
bali "Oceano Mare";
}
fungsi getAuthor () {
bali "Alessandro Baricco";
}
fungsi nguripake kaca () {
// kaca sabanjure
}
fungsi getCurrentPage () {
bali "isi kaca saiki";
}
fungsi simpen () {
$ filename = '/ documents /'. $ iki-> getTitolo (). '-'. $ iki-> getAuthor ();
file_put_contents ($ filename, serialize ($ iki));
}
}
Kaya sadurunge, ing kene kita uga bisa ngenali macem-macem aktor kaya Manajemen buku (minangka perpustakaan) yaiku Tekun terus. Yen pengin ngowahi cara menyang kaca, kita kudu ngganti kelas iki. Kita bisa duwe sawetara sebab pangowahan.
Buku Kelas {
fungsi getTitle () {
bali "Oceano Mare";
}
fungsi getAuthor () {
bali "Alessandro Baricco";
}
fungsi nguripake kaca () {
// kaca sabanjure
}
fungsi getCurrentPage () {
bali "isi kaca saiki";
}
}
kelas SimpleFilePersistence {
save fungsi (Book $ book) {
$ filename = '/ documents /'. $ book-> getTitle (). '-'. $ book-> getAuthor ();
file_put_contents ($ filename, serialize ($ book));
}
}
Pindhah operasi ketekunan menyang kelas liyane kanthi jelas bakal misahake tanggung jawab lan kita bakal bebas ngganti metode ketekunan tanpa mengaruhi kelas Buku. Contone, ngleksanakake kelas DatabasePersistence bakal sepele, lan logika bisnis sing dibangun sajrone operasi buku ora bakal owah.
Terusake maca prinsip nomer loro Bukak / Ditutup ->
Ercole Palmeri
Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…
Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…
Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...
Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…