CodeGym/Kursus Java/Modul 3/Cara alternatif untuk menghubungkan modul perisian

Cara alternatif untuk menghubungkan modul perisian

Tahap, pelajaran
Tersedia

Menggantikan kebergantungan langsung dengan pemesejan

Kadangkala modul hanya perlu memberitahu orang lain bahawa beberapa peristiwa/perubahan telah berlaku di dalamnya, dan tidak kira apa yang berlaku kepada maklumat ini kemudian.

Dalam kes ini, modul tidak perlu "mengetahui satu sama lain" sama sekali, iaitu, mengandungi pautan langsung dan berinteraksi secara langsung, tetapi cukup hanya untuk bertukar-tukar mesej (mesej) atau acara (peristiwa).

Kadang-kadang nampaknya komunikasi modul melalui pemesejan jauh lebih lemah daripada pergantungan langsung. Sesungguhnya, kerana kaedah tidak dipanggil, tidak ada maklumat tentang kelas. Tetapi ini tidak lebih daripada ilusi.

Daripada nama kaedah, logik mula terikat pada jenis mesej, parameternya dan data yang dihantar. Ketersambungan modul sedemikian tercemar.

Dahulunya seperti: kami memanggil kaedah - ada sambungan, kami tidak memanggil kaedah - tiada sambungan. Sekarang bayangkan bahawa modul A mula menghantar data yang sedikit berbeza dalam mesejnya. Dan pada masa yang sama, semua modul yang bergantung pada mesej ini tidak akan berfungsi dengan betul.

Katakan, sebelum ini, apabila menambah pengguna baharu, modul kebenaran menghantar mesej USER_ADDED, dan selepas kemas kini, ia mula menghantar mesej ini apabila cuba mendaftar dan tambahan menunjukkan pendaftaran berjaya atau tidak dalam parameter.

Oleh itu, adalah sangat penting untuk melaksanakan mekanisme mesej dengan sangat cekap. Terdapat pelbagai templat untuk ini.

Pemerhati. Ia digunakan dalam kes pergantungan satu-ke-banyak, apabila banyak modul bergantung pada keadaan satu - yang utama. Ia menggunakan mekanisme mel, yang bermaksud bahawa modul utama hanya menghantar mesej yang sama kepada semua pelanggannya, dan modul yang berminat dengan maklumat ini melaksanakan antara muka "pelanggan" dan melanggan senarai mel.

Pendekatan ini digunakan secara meluas dalam sistem dengan antara muka pengguna, membolehkan teras aplikasi (model) kekal bebas sambil memaklumkan antara muka yang berkaitan bahawa sesuatu telah berubah dan perlu dikemas kini.

Di sini format mesej diseragamkan pada peringkat sistem pengendalian, yang pembangunnya mesti menjaga keserasian ke belakang dan dokumentasi yang baik.

Organisasi interaksi melalui pengedaran mesej mempunyai "bonus" tambahan - kewujudan pilihan "pelanggan" kepada mesej "diterbitkan" (iaitu, dihantar). Sistem yang direka bentuk dengan baik seperti ini membolehkan modul ditambah/dialih keluar pada bila-bila masa.

Bas mesej

Anda boleh mengatur pertukaran mesej dan menggunakan corak Pengantara untuk ini dengan cara yang berbeza .

Ia digunakan apabila terdapat pergantungan banyak-ke-banyak antara modul. Pengantara bertindak sebagai perantara dalam komunikasi antara modul, bertindak sebagai pusat komunikasi dan menghapuskan keperluan modul untuk merujuk secara eksplisit antara satu sama lain.

Akibatnya, interaksi modul antara satu sama lain (“semua dengan semua”) digantikan dengan interaksi modul hanya dengan perantara (“satu dengan semua”). Mediator dikatakan merangkum interaksi antara pelbagai modul.

Bas mesej

Inilah yang dipanggil perantara pintar . Di sanalah pembangun paling kerap mula menambah tongkat mereka, yang mempengaruhi tingkah laku modul individu dengan menghidupkan / mematikan menerima mesej tertentu.

Contoh kehidupan sebenar yang biasa ialah kawalan trafik lapangan terbang. Semua mesej dari pesawat pergi ke menara kawalan pengawal dan bukannya dihantar terus antara pesawat. Dan pengawal sudah membuat keputusan tentang pesawat mana yang boleh berlepas atau mendarat, dan, seterusnya, menghantar mesej kepada pesawat.

Penting! Modul boleh menghantar satu sama lain bukan sahaja mesej mudah, tetapi juga objek arahan. Interaksi sedemikian diterangkan oleh templat Perintah . Intinya adalah untuk merangkum permintaan untuk melakukan tindakan tertentu sebagai objek yang berasingan.

Malah, objek ini mengandungi kaedah execute() tunggal , yang kemudiannya membolehkan anda menghantar tindakan ini kepada modul lain untuk pelaksanaan sebagai parameter dan secara amnya melakukan sebarang operasi dengan objek arahan yang boleh dilakukan pada objek biasa.

Hukum Demeter

Undang-undang Demeter melarang penggunaan kebergantungan tersirat: "Objek A mestilah tidak boleh mengakses objek C secara langsung jika objek A mempunyai akses kepada objek B dan objek B mempunyai akses kepada objek C."

Ini bermakna semua kebergantungan dalam kod mestilah "eksplisit" - kelas / modul hanya boleh menggunakan "kebergantungan mereka" dalam kerja mereka dan tidak sepatutnya mendakinya kepada orang lain. Contoh yang baik ialah seni bina tiga peringkat. Lapisan antara muka harus berfungsi dengan lapisan logik, tetapi tidak boleh berinteraksi secara langsung dengan lapisan pangkalan data.

Secara ringkas, prinsip ini juga dirumuskan dengan cara ini: "Berinteraksi hanya dengan rakan terdekat, dan bukan dengan rakan rakan." Ini mencapai kurang koheren kod, serta keterlihatan dan ketelusan reka bentuk yang lebih besar.

Undang-undang Demeter melaksanakan "prinsip pengetahuan minimum" yang telah disebutkan, yang merupakan asas gandingan longgar dan terdiri daripada fakta bahawa objek / modul harus mengetahui seberapa sedikit butiran yang mungkin tentang struktur dan sifat objek / modul lain dan apa-apa secara umum, termasuk komponennya sendiri .

Analogi dari kehidupan: jika anda mahu anjing itu berlari, adalah bodoh untuk memerintahkan kakinya, lebih baik memberi arahan kepada anjing itu, dan dia akan menangani kakinya sendiri.

Komposisi bukannya warisan

Ini adalah topik yang sangat besar dan menarik dan ia memerlukan sekurang-kurangnya kuliah yang berasingan. Banyak salinan telah dipecahkan mengenai topik ini di Internet sehingga kata sepakat dicapai - kami menggunakan warisan secara minimum, komposisi - secara maksimum.

Intinya ialah warisan sebenarnya menyediakan sambungan terkuat antara kelas, jadi ia harus dielakkan. Topik ini dibincangkan dengan baik dalam artikel Herb Sutter " Prefer Composition Over Inheritance ".

Apabila anda mula mempelajari corak reka bentuk, anda akan menemui sejumlah besar corak yang mengawal penciptaan objek atau struktur dalamannya. Dengan cara ini, saya boleh menasihati dalam konteks ini untuk memberi perhatian kepada corak Perwakilan / Perwakilan dan corak Komponen , yang datang daripada permainan .

Kami akan bercakap lebih lanjut mengenai corak sedikit kemudian.

Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi