Arsitektur aplikasi atau cara merusak karma di Habré

Anda dapat berbicara banyak tentang arsitektur aplikasi, SOLID, prinsip OOP, pola arsitektur seperti layered atau bawang, dll. pola desain. Sepanjang pengalaman saya, saya menyadari satu hal, berapa banyak orang yang memiliki begitu banyak pendapat. Ketika Anda seorang programmer pemula Anda memiliki banyak ambisi, Anda tumbuh sedikit di kualifikasi, Anda memiliki perasaan bahwa Anda tahu segalanya, dan semua yang telah dilakukan untuk Anda adalah "buruk", dan Anda pasti akan melakukan yang lebih baik ... Tetapi tahun-tahun berlalu dan pengalaman yang didapat menunjukkan sebaliknya. Di bawah potongan, saya akan mencoba secara singkat, dan yang paling penting, dengan kata-kata sederhana, memberi tahu Anda tentang betapa baiknya arsitektur. Setidaknya dapat diperluas dan didukung, untuk detail, saya meminta kucing ...

Pertama dan terutama, untuk membuat arsitektur proyek yang baik, Anda perlu memutuskan fitur-fiturnya:

  1. Arsitekturnya harus didukung.
  2. Sistem diperpanjang tanpa kruk.
  3. Fleksibilitas pengaturan, banyak tugas harus diselesaikan tanpa mengubah kode program.
  4. Keandalan arsitektur.

Poin pertama adalah kemudahan dukungan dipecahkan mengikuti prinsip-prinsip SOLID, pada dasarnya, tentu saja, prinsip "Keunikan Tanggung Jawab", jadi Anda perlu memilih arsitektur yang didasarkan pada layanan mikro atau arsitektur modular dari sistem inti monolitik. Tidak ada perbedaan mendasar antara pendekatan-pendekatan ini. Untuk proyek yang sedang saya kerjakan, saya memilih pendekatan ke-2, modul.

Poin kedua dapat dipecahkan dengan menggunakan event-observer atau pola pemrograman dispatcher, mereka mirip satu sama lain, jadi kita tidak akan fokus pada ini. Inti dari pekerjaan mereka adalah membuang beberapa pesan keluar dari modul yang saat ini sedang dieksekusi, dan, jika perlu, dengarkan modul yang perlu bekerja dengan objek ini.

Paragraf ketiga juga diselesaikan dengan cukup sederhana, bagian deskriptif entitas, yaitu atribut entitas yang disimpan secara terpisah dari entitas itu sendiri. Ini adalah referensi ke EAV (Nilai Atribut Entitas). Anda tidak harus memproses semua bidang entitas untuk logika bisnis, beberapa atribut membawa beban informatif, yang lain digunakan untuk menyortir dan memfilter, dan hanya sebagian untuk membangun logika bisnis. Karenanya, jika entitas disimpan sebagai EAV, kita dapat kapan saja menambah atau menghapus atribut yang tidak kita butuhkan.

Poin keempat dari persyaratan kami adalah keandalan, yang berarti minimal "tongkat penyangga" dan lebih banyak otomatisasi. Sebagian besar aplikasi web terdiri dari antarmuka tampilan data, tabel, filter, pengurutan, kartu entitas. Dan antarmuka entri data, formulir. Oleh karena itu, layak menggunakan pabrik untuk formulir, pabrik untuk meja, pabrik untuk kartu. Lebih banyak otomatisasi, pada akhirnya kita dapat abstrak dari bidang presentasi, dan fokus pada logika bisnis dan tugas-tugas substantif ...

Jadi kesimpulannya menunjukkan bahwa untuk membangun arsitektur yang baik, perlu untuk abstrak, memutuskan teknologi dan pola pemrograman dan membangun fondasi untuk memulai pengembangan ...

Sekarang kami telah mengembangkan rencana, memutuskan persyaratan, maka kami perlu memutuskan bagaimana membangun arsitektur. Sebenarnya, saya tidak mengerti semua arsitektur atau bawang berlapis ini. Saya mengambil sesuatu dari mereka dan menemukan sesuatu sendiri, dan saya tidak melihat apa pun di dalamnya jika orang hanya mengerti apa artinya. Bahkan, seluruh arsitektur turun ke langkah-langkah sederhana:

  • Fondasinya adalah abstraksi (kelas dan antarmuka abstrak yang menentukan kontrak berbagai komponen sistem yang dikombinasikan ke dalam modul)
  • Selanjutnya, saya memiliki lapisan kernel yang menjalankan modul dan mengaturnya.
  • Memuat sistem tata letak
  • Setelah memulai modul, setiap modul sebagai microservice terpisah

Tapi apa yang membuat arsitektur bagus? Pertanyaannya tidak sederhana, tetapi jika semuanya disederhanakan ke tingkat penalaran filosofis, maka pertanyaan ini akan dijawab. Setelah aplikasi dimulai. Kami memiliki bagian yang terisolasi, modul. Setiap modul hanya bertanggung jawab untuk satu fungsi sistem. Kami turun setiap modul, dirancang sebagai aplikasi MVC dan memiliki pandangan, pengontrol, model. Dan setiap bagian dari modul juga bertanggung jawab untuk setiap tindakannya. Kami turun lebih dalam dan kami akan melihat bahwa tampilan juga memiliki bagian-bagian tertentu, ini adalah kelas pabrik, dan ekstensi tata letak. Bahkan, tata letak juga merupakan modul, itu dimuat pertama-tama, semua modul lainnya melengkapinya, dan membangun antarmuka (atau sistem keluaran). Tetapi bagaimana Anda membuat semua ini kurang tergantung Anda bertanya? Dan jawabannya akan jelas bagi pengamat, untuk setiap render blok tata letak yang mereka buang dari acara mereka, Anda hanya perlu mendengarkan acara ini, mengamati dalam aplikasi Anda, dan menambahkan pembaruan blok yang diperlukan di lapisan, dan mendapatkan hasil yang sesuai. Banyak modul juga memiliki acara sendiri, dimana modul lain berlangganan dan dapat menambah / memperbarui data dalam set yang ditransfer. Semua ini mengarah pada fakta bahwa dalam aplikasi, modul-modul tersebut sedikit terhubung satu sama lain dan dapat hidup tanpa satu sama lain.

Sehubungan dengan hal di atas, muncul pertanyaan yang masuk akal: jika satu modul mendengarkan yang lain, maka perlu memiliki semacam sistem manajemen ketergantungan untuk modul-modul ini. Yaitu, modul di mana modul lain bergantung, kita harus mulai dari awal, dan yang tergantung kita harus menjalankannya. Maka lahirlah implementasi sederhana dari dependensi, kami membuat antrian untuk meluncurkan modul-modul dan mengurutkannya sedemikian rupa sehingga modul-modul yang menjadi sandaran dari yang lainnya di-load terlebih dahulu, setelah memuat kernel tentunya.

Kesimpulannya, saya bisa mengatakan yang berikut ini. Arsitektur yang baik bukanlah tugas yang sulit dan jangka panjang untuk dihemat. Dan pada akhirnya, membantu menghabiskan sumber daya dan waktu dengan lebih efisien. Lagi pula, mengubah pengaturan pada panel kontrol adalah urusan lima menit. Menulis dua baris untuk menambahkan juga tidak begitu banyak waktu. Tetapi membuat kesimpulan, membalikkan semuanya, men-debug data dalam jumlah besar sudah merupakan waktu yang jauh lebih lama daripada waktu untuk mengembangkan strategi konstruksi arsitektur.

Source: https://habr.com/ru/post/id457422/


All Articles