CodeGym /Kursus Java /Modul 3 /Bagaimana untuk melonggarkan gandingan antara modul peris...

Bagaimana untuk melonggarkan gandingan antara modul perisian

Modul 3
Tahap , pelajaran
Tersedia

8.1 Penguraian adalah segala-galanya

Untuk kejelasan, gambar dari artikel yang bagus "Penyahgandingan Sistem Berorientasikan Objek", menggambarkan perkara utama yang akan dibincangkan.

Penguraian

Adakah anda masih berfikir bahawa mereka bentuk seni bina aplikasi adalah mudah?

8.2 Antara muka, pelaksanaan bersembunyi

Prinsip utama untuk mengurangkan gandingan sistem adalah prinsip OOP dan prinsip Enkapsulasi + Abstraksi + Polimorfisme di belakangnya.

Itulah sebabnya:

  • Modul hendaklah "kotak hitam" untuk satu sama lain (enkapsulasi) . Ini bermakna bahawa satu modul tidak seharusnya "memanjat" ke modul lain dan mengetahui apa-apa tentang struktur dalamannya. Objek dalam satu subsistem tidak boleh mengakses secara langsung objek dalam subsistem lain.
  • Modul/subsistem harus berinteraksi antara satu sama lain hanya melalui antara muka (iaitu, abstraksi yang tidak bergantung pada butiran pelaksanaan). Sehubungan itu, setiap modul mesti mempunyai antara muka atau antara muka yang jelas untuk berinteraksi dengan modul lain.

Prinsip "kotak hitam" (enkapsulasi) membolehkan kita mempertimbangkan struktur setiap subsistem secara bebas daripada subsistem lain. Modul, yang merupakan "kotak hitam", boleh ditukar secara relatifnya. Masalah boleh timbul hanya di persimpangan modul yang berbeza (atau modul dan persekitaran).

Dan interaksi ini mesti diterangkan dalam bentuk yang paling umum (abstrak), iaitu, dalam bentuk antara muka. Dalam kes ini, kod akan berfungsi sama dengan mana-mana pelaksanaan yang mematuhi kontrak antara muka. Ia adalah keupayaan untuk bekerja dengan pelaksanaan yang berbeza (modul atau objek) melalui antara muka bersatu yang dipanggil polimorfisme.

Itulah sebabnya Servlet ialah antara muka : bekas web tidak tahu apa-apa tentang servlet, kerana ini adalah beberapa objek yang melaksanakan antara muka Servlet dan itu sahaja. Servlet juga tahu serba sedikit tentang struktur bekas. Antara muka Servlet ialah kontrak itu, piawaian itu, interaksi minimum yang diperlukan untuk menjadikan aplikasi web Java mengambil alih dunia.

Polimorfisme sama sekali tidak mengatasi kaedah, seperti yang kadangkala tersilap dipercayai, tetapi pertama sekali, kebolehtukaran modul / objek dengan antara muka yang sama atau "satu antara muka, banyak pelaksanaan". Untuk melaksanakan polimorfisme, mekanisme pewarisan tidak diperlukan sama sekali. Ini penting untuk difahami kerana pewarisan secara umum harus dielakkan apabila mungkin .

Terima kasih kepada antara muka dan polimorfisme, ia adalah tepat keupayaan untuk mengubah suai dan melanjutkan kod tanpa mengubah apa yang telah ditulis (Prinsip Terbuka-Tertutup) dicapai.

Selagi interaksi modul diterangkan secara eksklusif dalam bentuk antara muka dan tidak terikat dengan pelaksanaan tertentu, anda mempunyai peluang untuk benar-benar "tanpa rasa sakit" untuk sistem menggantikan satu modul dengan mana-mana modul lain yang melaksanakan antara muka yang sama, serta tambah yang baharu dan seterusnya mengembangkan fungsi.

Ia seperti dalam pembina LEGO - antara muka menyeragamkan interaksi dan berfungsi sebagai sejenis penyambung di mana mana-mana modul dengan penyambung yang sesuai boleh disambungkan.

Fleksibiliti pereka bentuk dipastikan oleh fakta bahawa kita hanya boleh menggantikan satu modul atau bahagian dengan yang lain dengan penyambung yang sama (dengan antara muka yang sama), serta menambah seberapa banyak bahagian baru yang kita suka (pada masa yang sama, sedia ada. bahagian tidak ditukar atau diubah dalam apa jua cara).

Antara muka membolehkan anda membina sistem yang lebih mudah, dengan mengambil kira setiap subsistem secara keseluruhan dan mengabaikan struktur dalamannya. Mereka membenarkan modul berinteraksi dan pada masa yang sama tidak tahu apa-apa tentang struktur dalaman antara satu sama lain, dengan itu melaksanakan sepenuhnya prinsip pengetahuan minimum, yang merupakan asas gandingan longgar.

Lebih umum/abstrak antara muka ditakrifkan dan lebih sedikit sekatan yang dikenakan ke atas interaksi, lebih fleksibel sistem. Dari sini, satu lagi prinsip SOLID sebenarnya mengikuti - Prinsip Pengasingan Antara Muka , yang menentang "antara muka tebal".

Dia mengatakan bahawa antara muka yang besar dan besar harus dipecahkan kepada yang lebih kecil, lebih khusus, supaya pelanggan antara muka kecil (bergantung modul) hanya tahu tentang kaedah yang mereka perlukan untuk bekerja dengannya.

Prinsip ini dirumuskan seperti berikut: "Pelanggan tidak seharusnya bergantung pada kaedah (berhati-hati dengan kaedah) yang mereka tidak gunakan" atau "Banyak antara muka khusus lebih baik daripada satu universal".

Ternyata sambungan yang lemah hanya disediakan apabila interaksi dan kebergantungan modul diterangkan hanya dengan bantuan antara muka, iaitu, abstraksi, tanpa menggunakan pengetahuan tentang struktur dan struktur dalaman mereka. Dan sebenarnya, enkapsulasi dilaksanakan. Selain itu, kami mempunyai keupayaan untuk mengembangkan / mengubah tingkah laku sistem dengan menambah dan menggunakan pelaksanaan yang berbeza, iaitu, disebabkan oleh polimorfisme. Ya, kami sekali lagi datang ke OOP - Enkapsulasi, Abstraksi, Polimorfisme.

8.3 Fasad: antara muka modul

Di sini seorang pengaturcara yang berpengalaman akan bertanya: jika reka bentuk tidak berada pada tahap objek yang melaksanakan antara muka yang sepadan, tetapi pada tahap modul, maka apakah pelaksanaan antara muka modul?

Jawapan: bercakap dalam bahasa corak reka bentuk, maka objek khas boleh bertanggungjawab untuk pelaksanaan antara muka modul - Fasad . Jika anda memanggil kaedah pada objek yang mengandungi akhiran Gateway (contohnya, MobileApiGateway), maka kemungkinan besar ia adalah fasad.

Fasad ialah objek antara muka yang mengumpul set operasi peringkat tinggi untuk bekerja dengan subsistem tertentu, menyembunyikan struktur dalamannya dan kerumitan sebenar di belakangnya . Memberi perlindungan terhadap perubahan dalam pelaksanaan subsistem. Berfungsi sebagai titik masuk tunggal - "anda menendang fasad, dan dia tahu siapa yang perlu ditendang dalam subsistem ini untuk mendapatkan apa yang dia perlukan."

Anda baru sahaja diperkenalkan kepada salah satu corak reka bentuk yang paling penting yang membolehkan anda menggunakan konsep antara muka semasa mereka bentuk modul dan dengan itu memisahkannya - "Fasad".

Di samping itu, "Fasad" memungkinkan untuk bekerja dengan modul dengan cara yang sama seperti dengan objek biasa dan menggunakan semua prinsip dan teknik berguna yang digunakan dalam reka bentuk kelas semasa mereka bentuk modul.

Fasad: antara muka modul

Nota : Walaupun kebanyakan pengaturcara memahami kepentingan antara muka apabila mereka bentuk kelas (objek), nampaknya ramai yang menemui idea untuk menggunakan antara muka pada peringkat modul juga.

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION