Pola Arsitektur yang Dipelajari dengan Python
(cosmicpython.com)- Buku karya Harry, penulis "TDD with Python", dan Bob, seorang arsitek perangkat lunak, yang menjelaskan cara memahami dan mengelola arsitektur perangkat lunak yang kompleks
- Merangkum dan membagikan teknik arsitektur yang benar-benar digunakan di perusahaan e-commerce
MADE.comadalah perusahaan penjualan furnitur online berbasis di Eropa yang mengoperasikan rantai pasok global- Tujuannya adalah meminimalkan inventaris melalui optimasi logistik dan menyelaraskan agar logistik tiba bersamaan dengan pesanan konsumen
- Namun, dunia nyata itu kompleks dan tidak dapat diprediksi, sehingga mereka membangun perangkat lunak cerdas yang mencerminkan hal tersebut untuk melakukan otomatisasi
- Buku ini membahas pola arsitektur yang dirancang untuk menyelesaikan masalah-masalah nyata semacam itu
Mengapa Python
- Python adalah bahasa yang berkembang pesat secara global dan semakin menantang masalah enterprise yang kompleks
- Sebagian besar buku arsitektur yang ada menggunakan contoh berbasis Java atau C#, sehingga sulit diakses oleh pengguna Python
- Buku ini memperkenalkan pola arsitektur klasik dengan cara yang sesuai untuk komunitas Python
Pengantar TDD, DDD, dan arsitektur berbasis event
- TDD (Test-Driven Development):
- Pengembangan yang mendahulukan pengujian memungkinkan refactoring yang aman dan penambahan fitur
- Unit test yang cepat dan tanpa dependensi harus diprioritaskan, sementara pengujian end-to-end yang lambat dan tidak stabil harus diminimalkan
- DDD (Domain-Driven Design):
- Berfokus pada model domain bisnis, tetapi penting juga untuk mengurangi ketergantungan pada infrastruktur dan framework
- Arsitektur berbasis event:
- Mengelola kompleksitas melalui komunikasi berbasis pesan antar microservice
- Perlu mempertimbangkan bagaimana mengintegrasikannya dengan alat Python yang sudah ada seperti Flask, Django, dan Celery
Catatan: Sebagian besar pola yang dibahas dalam buku ini juga dapat diterapkan pada arsitektur monolitik
- Tujuan buku ini adalah memperkenalkan pola arsitektur yang mendukung TDD, DDD, dan layanan berbasis event di Python serta menunjukkan cara menerapkannya
Pembaca sasaran buku ini
- Pengembang yang pernah menangani aplikasi Python yang kompleks
- Tidak masalah jika tidak memiliki pengetahuan latar tentang pola arsitektur atau DDD
- Disusun agar tetap mudah diikuti meskipun belum terbiasa dengan gaya TDD yang menulis pengujian terlebih dahulu lalu implementasi
- Menggunakan Flask, SQLAlchemy, pytest, Docker, Redis, dan lainnya, tetapi itu bukan pengetahuan wajib
- Menargetkan desain arsitektur yang independen dari teknologi tertentu, bukan terikat pada teknologi spesifik
Ringkasan materi pembelajaran
Part 1
- Pemodelan domain dan DDD (Bab 1, 2, 7)
- Memperkenalkan cara membangun model domain tanpa dependensi eksternal
- Membahas cara menulis unit test yang cepat serta kaitannya dengan integritas data
- Menjelaskan cara memilih Aggregate yang tepat
- Pola Repository, Service Layer, Unit of Work (Bab 2, 4, 5)
- Mengabstraksikan lapisan persistensi untuk memisahkan model dari dependensi eksternal
- Merancang service layer sebagai titik masuk sistem
- Cocok untuk membangun titik masuk tipis seperti API Flask atau CLI
- Refleksi tentang pengujian dan abstraksi (Bab 3, 5)
- Menjelajahi peran dan kriteria pemilihan lapisan abstraksi yang tepat
- Menulis unit test pada tingkat abstraksi yang lebih tinggi untuk mencapai test pyramid
Part 2
- Arsitektur berbasis event (Bab 8–11)
- Memperkenalkan pola Domain Events, Message Bus, dan Handler
- Memicu interaksi di dalam sistem melalui event
- Menjelaskan cara integrasi antar microservice dengan memanfaatkan event
- Membedakan command dan event
- Seluruh aplikasi berubah menjadi sistem pemrosesan pesan
- CQRS (Command-Query Responsibility Segregation) (Bab 12)
- Memperkenalkan efisiensi struktural melalui pemisahan tanggung jawab command dan query
- Termasuk contoh implementasi dengan dan tanpa penggunaan event
- Dependency injection (Bab 13)
- Merapikan dependensi eksplisit dan implisit
- Mengimplementasikan framework dependency injection sederhana
Lampiran dan panduan praktik
- Cara menerapkannya pada proyek yang sudah ada (epilog)
- Menerapkan pola ke sistem yang sudah ada lebih sulit daripada ke contoh sederhana
- Menyediakan strategi penerapan dan materi referensi untuk itu
- Praktik kode dan contoh GitHub
- Seluruh isi buku disusun sebagai satu proyek contoh
- Kode untuk tiap bab disediakan melalui branch GitHub
- Cara berlatih:
- Mengikuti dan mengimplementasikan sendiri aplikasi contoh
- Mencoba menerapkan pola tersebut ke proyek sendiri
- Menulis kode latihan dengan memanfaatkan "Exercise for the Reader" di tiap bab
Tips: Disarankan me-checkout branch GitHub yang sesuai di awal tiap bab agar dapat belajar bersama kode yang benar-benar berjalan
2 komentar
Sudah tersedia dalam edisi bahasa Korea Architecture Patterns with Python
Komentar Hacker News
Buku ini seperti tambang emas untuk pola arsitektur. Saya suka karena topiknya mudah dipahami
Sebagian isi buku ini sangat berguna. Terutama ketika membahas konsep yang tidak terbatas pada Python atau bahasa tertentu
Saya melihat Python sebagai bahasa perekat yang bagus
Saya developer TypeScript, tetapi buku ini adalah salah satu buku arsitektur favorit saya. Saya selalu merujuknya
Saya mulai menulis Python secara profesional beberapa tahun lalu. Saya datang dari Kotlin dan TypeScript, dan meski bahasanya mudah didekati, saya kesulitan mencapai loose coupling dan testability
Ini benar-benar salah satu buku pemrograman Python yang hebat. Saya hanya menyesalkan tidak adanya static typing di kodenya, tetapi itu memang keputusan yang disengaja oleh penulis
Terima kasih telah membagikan materi yang luar biasa ini
Saya membaca versi paperback buku ini sekitar 2 setengah atau 3 tahun lalu. Sangat menyenangkan. Buku ini menjaga testing sebagai topik kelas satu dan terus memperbaruinya seiring setiap tambahan
Tidak ada penyebutan tentang Polylith. Saya penasaran apakah itu relevan
Buku ini bacaan yang luar biasa. Tiga tahun lalu saya bekerja di lingkungan DDD C#/.NET, dan sekarang saat meninjau kembali konsep-konsep ini di Python, saya merasa bagian-bagian esensialnya jadi lebih terasah