CodeGym/Java Course/Modul 3/Cara melonggarkan sambungan antar modul perangkat lunak

Cara melonggarkan sambungan antar modul perangkat lunak

Level 14, Pelajaran 7
Tersedia

8.1 Dekomposisi adalah segalanya

Untuk lebih jelasnya, gambar dari artikel bagus "Decoupling of Object-Oriented Systems", yang menggambarkan poin-poin utama yang akan dibahas.

Penguraian

Apakah Anda masih berpikir bahwa merancang arsitektur aplikasi itu mudah?

8.2 Antarmuka, penyembunyian implementasi

Prinsip utama untuk mengurangi kopling sistem adalah prinsip OOP dan prinsip Enkapsulasi + Abstraksi + Polimorfisme di belakangnya.

Itulah mengapa:

  • Modul harus "kotak hitam" satu sama lain (enkapsulasi) . Ini berarti bahwa satu modul tidak boleh "naik" ke modul lain dan mengetahui apa pun tentang struktur internalnya. Objek dalam satu subsistem tidak boleh langsung mengakses objek di subsistem lain.
  • Modul/subsistem harus berinteraksi satu sama lain hanya melalui antarmuka (yaitu, abstraksi yang tidak bergantung pada detail implementasi). Karenanya, setiap modul harus memiliki antarmuka atau antarmuka yang terdefinisi dengan baik untuk berinteraksi dengan modul lain.

Prinsip "kotak hitam" (enkapsulasi) memungkinkan kita untuk mempertimbangkan struktur setiap subsistem secara independen dari subsistem lainnya. Modul, yang merupakan "kotak hitam", dapat diubah secara relatif bebas. Masalah hanya dapat muncul di persimpangan modul yang berbeda (atau modul dan lingkungan).

Dan interaksi ini harus dideskripsikan dalam bentuk yang paling umum (abstrak), yaitu dalam bentuk antarmuka. Dalam hal ini, kode akan bekerja sama dengan implementasi apa pun yang sesuai dengan kontrak antarmuka. Kemampuan untuk bekerja dengan implementasi yang berbeda (modul atau objek) melalui antarmuka terpadu inilah yang disebut polimorfisme.

Itu sebabnya Servlet adalah sebuah antarmuka : wadah web tidak tahu apa-apa tentang servlet, karena ini adalah beberapa objek yang mengimplementasikan antarmuka Servlet dan hanya itu. Servlet juga tahu sedikit tentang struktur wadah. Antarmuka Servlet adalah kontrak itu, standar itu, interaksi minimum yang diperlukan untuk membuat aplikasi web Java mengambil alih dunia.

Polimorfisme sama sekali bukan pengesampingan metode, seperti yang terkadang diyakini secara keliru, tetapi pertama-tama, modul / objek yang dapat dipertukarkan dengan antarmuka yang sama atau "satu antarmuka, banyak implementasi". Untuk mengimplementasikan polimorfisme, mekanisme pewarisan tidak diperlukan sama sekali. Hal ini penting untuk dipahami karena pewarisan secara umum harus dihindari sebisa mungkin .

Berkat antarmuka dan polimorfisme, justru kemampuan untuk memodifikasi dan memperluas kode tanpa mengubah apa yang sudah ditulis (Prinsip Terbuka-Tertutup) tercapai.

Selama interaksi modul dijelaskan secara eksklusif dalam bentuk antarmuka dan tidak terikat pada implementasi tertentu, Anda memiliki kesempatan untuk benar-benar "tanpa rasa sakit" untuk mengganti satu modul dengan modul lain yang mengimplementasikan antarmuka yang sama, serta tambahkan yang baru dan dengan demikian memperluas fungsionalitas.

Ini seperti di konstruktor LEGO - antarmuka membakukan interaksi dan berfungsi sebagai semacam konektor tempat modul apa pun dengan konektor yang sesuai dapat dihubungkan.

Fleksibilitas perancang dipastikan oleh fakta bahwa kita dapat dengan mudah mengganti satu modul atau bagian dengan yang lain dengan konektor yang sama (dengan antarmuka yang sama), serta menambahkan bagian baru sebanyak yang kita suka (pada saat yang sama, ada bagian tidak diubah atau diubah dengan cara apa pun).

Antarmuka memungkinkan Anda membangun sistem yang lebih sederhana, mempertimbangkan setiap subsistem secara keseluruhan dan mengabaikan struktur internalnya. Mereka mengizinkan modul untuk berinteraksi dan pada saat yang sama tidak tahu apa-apa tentang struktur internal satu sama lain, sehingga sepenuhnya menerapkan prinsip pengetahuan minimal, yang merupakan dasar dari kopling longgar.

Semakin umum/abstrak antarmuka didefinisikan dan semakin sedikit batasan yang diberlakukan pada interaksi, semakin fleksibel sistem. Dari sini, satu lagi prinsip SOLID sebenarnya mengikuti - Prinsip Segregasi Antarmuka , yang menentang "antarmuka tebal".

Dia mengatakan bahwa antarmuka yang besar dan besar harus dipecah menjadi yang lebih kecil, lebih spesifik, sehingga klien dari antarmuka kecil (tergantung modul) hanya tahu tentang metode yang mereka butuhkan untuk bekerja.

Prinsip ini dirumuskan sebagai berikut: "Klien tidak boleh bergantung pada metode (waspadai metode) yang tidak mereka gunakan" atau "Banyak antarmuka khusus lebih baik daripada satu antarmuka universal".

Ternyata konektivitas yang lemah disediakan hanya ketika interaksi dan ketergantungan modul dijelaskan hanya dengan bantuan antarmuka, yaitu abstraksi, tanpa menggunakan pengetahuan tentang struktur dan struktur internalnya, dan pada kenyataannya, enkapsulasi diimplementasikan. Plus, kami memiliki kemampuan untuk memperluas / mengubah perilaku sistem dengan menambahkan dan menggunakan implementasi yang berbeda, yaitu karena polimorfisme. Ya, kami kembali ke OOP - Enkapsulasi, Abstraksi, Polimorfisme.

8.3 Fasad: antarmuka modul

Di sini seorang programmer yang berpengalaman akan bertanya: jika desainnya bukan pada level objek yang mengimplementasikan sendiri antarmuka yang sesuai, tetapi pada level modul, lalu apa implementasi dari antarmuka modul?

Jawaban: berbicara dalam bahasa pola desain, maka objek khusus dapat bertanggung jawab atas penerapan antarmuka modul - Fasad . Jika Anda memanggil metode pada objek yang berisi akhiran Gateway (misalnya, MobileApiGateway), kemungkinan besar itu adalah fasad.

Fasad adalah objek antarmuka yang mengakumulasi serangkaian operasi tingkat tinggi untuk bekerja dengan subsistem tertentu, menyembunyikan struktur internalnya dan kompleksitas sebenarnya di baliknya . Memberikan perlindungan terhadap perubahan implementasi subsistem. Berfungsi sebagai satu titik masuk - "Anda menendang fasad, dan dia tahu siapa yang perlu ditendang dalam subsistem ini untuk mendapatkan apa yang dia butuhkan."

Anda baru saja diperkenalkan dengan salah satu pola desain terpenting yang memungkinkan Anda menggunakan konsep antarmuka saat mendesain modul dan dengan demikian memisahkannya - "Fasad".

Selain itu, "Fasad" memungkinkan untuk bekerja dengan modul dengan cara yang sama seperti objek biasa dan menerapkan semua prinsip dan teknik berguna yang digunakan dalam desain kelas saat mendesain modul.

Fasad: antarmuka modul

Catatan : Meskipun sebagian besar programmer memahami pentingnya antarmuka saat mendesain kelas (objek), tampaknya banyak yang menemukan ide untuk menggunakan antarmuka di tingkat modul juga.

Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar