5 poin oleh GN⁺ 2025-03-29 | 2 komentar | Bagikan ke WhatsApp
  • 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.com adalah 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

 
xguru 2025-03-29

Sudah tersedia dalam edisi bahasa Korea Architecture Patterns with Python

 
GN⁺ 2025-03-29
Komentar Hacker News
  • Buku ini seperti tambang emas untuk pola arsitektur. Saya suka karena topiknya mudah dipahami

    • Namun dalam praktiknya, pola-pola seperti ini bisa menimbulkan masalah kompleksitas dan performa. Terutama saat memakai framework yang sudah sangat opinionated seperti Django
    • Saya pernah menggunakan Python di perusahaan besar dan kecil. Perusahaan besar yang memakai pola arsitektur ketat punya kode yang "bersih", tetapi terlalu kompleks dan lambat
    • Sebaliknya, perusahaan besar yang mengabaikan pola punya kode yang benar-benar berantakan, tetapi produktivitasnya tinggi. Meski kodenya berantakan, tetap bisa dibaca, dipahami, dan diubah
    • Mungkin ini juga soal diri saya sendiri, tetapi saya lebih produktif di perusahaan dengan kode yang tidak terlalu terstruktur. Saya bisa menghindari perdebatan soal clean code
  • Sebagian isi buku ini sangat berguna. Terutama ketika membahas konsep yang tidak terbatas pada Python atau bahasa tertentu

    • Namun di bagian lain ada masalah. Ini bisa berbahaya ketika developer yang kurang berpengalaman mencoba menerapkan semuanya sekaligus
    • Misalnya, pola repository umumnya berguna, tetapi dalam banyak kasus termasuk contoh di buku ini, sering kali hanya menambah kompleksitas
    • Service layer dan unit of work berguna untuk aplikasi yang kompleks, tetapi dalam sistem yang terdiri dari layanan-layanan kecil bisa menjadi terlalu gemuk
    • Design pattern, seperti alat lainnya, harus dipahami kapan dipakai dan kapan tidak. Buku ini memang memberi saran soal itu, tetapi seharusnya ditekankan lebih kuat
  • Saya melihat Python sebagai bahasa perekat yang bagus

    • Kritik terhadap pola pikir OOP yang dipaksakan. Kritik terhadap pemaksaan enkapsulasi dan pewarisan untuk segala hal
    • Kritik terhadap SOLID, clean coding, clean architecture, pola GoF, dan Uncle Bob
    • Mengikuti alur imperatif atau fungsional dan menggunakan OOP sesedikit mungkin
    • Saat memakai Python, saya menginginkan pengalaman tanpa terlalu banyak objek dan pola
    • Bukan berarti buku ini tidak bernilai. Buku ini berguna untuk mempelajari pola. Tetapi tidak semua hal harus dipaksakan ke pemrograman nyata
  • Saya developer TypeScript, tetapi buku ini adalah salah satu buku arsitektur favorit saya. Saya selalu merujuknya

    • Saya hampir secara religius memakai pola fake unit of work/service untuk testing. Ini membantu memalsukan layanan pihak ketiga
    • Saya merekomendasikan penamaan event dengan cara yang spesifik terhadap domain. Ini menyelesaikan bagian yang biasanya merepotkan saat harus dijelaskan ke rekan tim
    • Cosmic Python tersedia sepenuhnya secara online sehingga mudah untuk ditautkan. Secara keseluruhan, ini sumber yang luar biasa dan sangat membentuk pemahaman
  • 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

    • Atas rekomendasi rekan kerja, saya membeli buku ini dan membacanya dari awal sampai akhir. Ini membantu saya memahami cara mengelola kompleksitas dalam codebase Python yang rumit
    • Saya tidak mengikuti semua polanya, tetapi saya jadi tahu kemungkinan-kemungkinannya dan bagaimana menerapkan pengalaman dari paradigma lain ke Python
    • Sangat direkomendasikan. Layak dibaca
  • 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

    • Testing yang siap digunakan, mudah ditulis, dan mudah diperbarui membuat proses pengembangan jauh lebih menyenangkan. Kebutuhan untuk menjalankan kode secara manual demi memeriksa masalah jadi berkurang
    • Bagian yang berorientasi event menarik, tetapi tidak cukup praktis untuk diterapkan di pekerjaan saya saat ini
  • 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

    • Jika Anda tertarik pada topik seperti ini, saya sangat merekomendasikannya