6.1 Dekomposisi

Terlepas dari beragamnya kriteria, tugas utama dalam pengembangan sistem besar adalah tugas mengurangi kompleksitas sistem . Untuk mengurangi kerumitan, tidak ada apa-apa selain pembagian menjadi beberapa bagian yang telah ditemukan.

Kadang-kadang, untuk kesederhanaan, ini disebut prinsip "bagi dan taklukkan", tetapi, dari sudut pandang arsitek perangkat lunak, kita berbicara tentang dekomposisi hierarkis .

Suatu sistem yang kompleks harus dibangun dari sejumlah kecil subsistem yang lebih sederhana, yang masing-masing pada gilirannya dibangun dari bagian-bagian yang lebih kecil, dan seterusnya hingga bagian-bagian terkecil cukup sederhana untuk dipahami dan dibuat secara langsung.

Penguraian

Kabar baiknya adalah solusi ini bukan hanya satu-satunya yang diketahui, tetapi juga universal. Selain mengurangi kompleksitas, secara bersamaan memberikan fleksibilitas sistem , skalabilitas yang baik , dan peningkatan ketahanan dengan menduplikasi bagian-bagian penting.

Oleh karena itu, dalam hal membangun arsitektur program, membuat strukturnya, ini berarti menguraikan program menjadi subsistem, layanan, lapisan, subrutin, dan modul fungsional serta mengatur interaksinya satu sama lain dan dunia luar.

Dan hal yang paling berharga di sini adalah ini: semakin mandiri subsistem, semakin aman untuk fokus pada pengembangan masing-masing subsistem secara terpisah pada titik waktu tertentu dan tidak mengkhawatirkan semua bagian lainnya.

6.2 Manfaat arsitektur modular

Menggunakan prinsip dekomposisi hierarkis memungkinkan Anda menyingkirkan kekacauan di ribuan kelas kode Anda. Ingat bahwa kode Anda dipecah menjadi paket (paket) dan subpaket? Ini adalah salah satu ekspresi untuk dekomposisi hierarkis.

Program Anda berubah dari sekumpulan kelas menjadi sekumpulan pustaka dan modul yang berinteraksi satu sama lain sesuai dengan aturan yang jelas dan sederhana. Ini, pada gilirannya, memungkinkan Anda untuk mengontrol kerumitannya, dan juga memberi Anda kesempatan untuk mendapatkan semua manfaat yang biasanya terkait dengan konsep arsitektur yang baik.

Inilah yang paling mendasar:

  • Skalabilitas - kemampuan untuk memperluas sistem dan meningkatkan kinerjanya dengan menambahkan modul baru.
  • Pemeliharaan - mengubah satu modul tidak memerlukan perubahan modul lainnya.
  • Swapabilitas modul (Swappability) - modul dapat dengan mudah diganti dengan yang lain.
  • Pengujian Unit – Sebuah unit dapat dipisahkan dari unit lainnya dan diuji/diperbaiki .
  • Dapat digunakan kembali - modul dapat digunakan kembali di program lain dan lingkungan lain.
  • Pemeliharaan - program yang dibagi menjadi beberapa modul lebih mudah dipahami dan dipelihara.

Dapat dikatakan bahwa memecahkan masalah yang kompleks menjadi bagian-bagian sederhana adalah tujuan dari semua teknik desain . Dan istilah "arsitektur" dalam banyak kasus hanya merujuk pada hasil pembagian semacam itu ditambah "beberapa keputusan desain yang, setelah diadopsi, sulit untuk diubah" (Martin Fowler "Arsitektur Aplikasi Perangkat Lunak Perusahaan").

Oleh karena itu, sebagian besar definisi dalam satu bentuk atau lainnya bermuara sebagai berikut:

" Arsitektur mengidentifikasi komponen utama dari sistem dan bagaimana mereka berinteraksi. Itu juga merupakan pilihan keputusan yang ditafsirkan sebagai fundamental dan tidak dapat berubah di masa depan ."

" Arsitektur adalah pengorganisasian suatu sistem, yang diwujudkan dalam komponen-komponennya, hubungannya satu sama lain dan dengan lingkungan. Sistem adalah sekumpulan komponen yang digabungkan untuk menjalankan fungsi tertentu ."

Jadi, arsitektur yang baik, pertama-tama, adalah arsitektur modular / blok . Untuk mendapatkan arsitektur yang baik, Anda perlu mengetahui cara menguraikan sistem dengan benar. Artinya, perlu dipahami dekomposisi mana yang dianggap "benar" dan cara terbaik untuk melakukannya.