Các mẫu kiến trúc nhìn qua Python
(cosmicpython.com)- Cuốn sách trong đó tác giả Harry của "TDD with Python" và kiến trúc sư phần mềm Bob giải thích cách hiểu và quản lý các kiến trúc phần mềm phức tạp
- Chia sẻ tổng hợp các kỹ thuật kiến trúc đã được sử dụng thực tế tại một công ty thương mại điện tử
MADE.comlà một công ty bán đồ nội thất trực tuyến có trụ sở tại châu Âu, vận hành chuỗi cung ứng toàn cầu- Mục tiêu là giảm thiểu tồn kho thông qua tối ưu hóa logistics và điều phối để hàng hóa logistics đến cùng lúc với đơn đặt hàng của người tiêu dùng
- Nhưng thế giới thực rất phức tạp và khó dự đoán, vì vậy họ đang tự động hóa bằng cách xây dựng phần mềm thông minh phản ánh điều đó
- Cuốn sách này đề cập đến các mẫu kiến trúc được thiết kế để giải quyết những vấn đề thực chiến như vậy
Vì sao là Python
- Python là một ngôn ngữ đang tăng trưởng nhanh trên toàn cầu và ngày càng thách thức những bài toán enterprise phức tạp
- Phần lớn các sách kiến trúc hiện có dùng ví dụ dựa trên Java hoặc C#, nên người dùng Python khó tiếp cận hơn
- Cuốn sách này giới thiệu các mẫu kiến trúc kinh điển theo cách phù hợp với cộng đồng Python
Giới thiệu TDD, DDD và kiến trúc hướng sự kiện
- TDD (Test-Driven Development):
- Phát triển hướng kiểm thử giúp có thể refactor ổn định và bổ sung tính năng
- Nên ưu tiên unit test nhanh và không phụ thuộc, đồng thời giảm thiểu các bài kiểm thử end-to-end chậm và kém ổn định
- DDD (Domain-Driven Design):
- Tập trung vào mô hình domain nghiệp vụ, nhưng điều quan trọng là giảm phụ thuộc vào hạ tầng và framework
- Kiến trúc hướng sự kiện:
- Quản lý độ phức tạp bằng giao tiếp dựa trên message giữa các microservice
- Cần cân nhắc cách tích hợp với các công cụ Python sẵn có như Flask, Django, Celery
Tham khảo: phần lớn các mẫu được đề cập trong cuốn sách này cũng có thể áp dụng cho kiến trúc monolithic
- Mục tiêu của cuốn sách là giới thiệu các mẫu kiến trúc hỗ trợ TDD, DDD và dịch vụ hướng sự kiện trong Python, đồng thời đưa ra cách áp dụng chúng
Độc giả mục tiêu của cuốn sách
- Các lập trình viên đã có kinh nghiệm xử lý ứng dụng Python phức tạp
- Không cần có kiến thức nền về mẫu kiến trúc hay DDD
- Nội dung được tổ chức để người chưa quen phong cách TDD, tức viết test trước rồi mới triển khai, vẫn có thể theo được
- Có sử dụng Flask, SQLAlchemy, pytest, Docker, Redis, nhưng không phải là kiến thức bắt buộc
- Mục tiêu là thiết kế kiến trúc độc lập với công nghệ, chứ không gắn với một công nghệ cụ thể
Tổng quan nội dung học
Part 1
- Mô hình hóa domain và DDD (chương 1, 2, 7)
- Giới thiệu cách xây dựng mô hình domain mà không có phụ thuộc bên ngoài
- Xem xét cách viết unit test nhanh và mối liên hệ của chúng với tính toàn vẹn dữ liệu
- Giải thích cách chọn Aggregate phù hợp
- Các mẫu Repository, Service Layer, Unit of Work (chương 2, 4, 5)
- Trừu tượng hóa tầng persistence để tách mô hình khỏi các phụ thuộc bên ngoài
- Thiết kế service layer như điểm vào của hệ thống
- Phù hợp để xây dựng các điểm vào mỏng như Flask API hoặc CLI
- Suy ngẫm về kiểm thử và trừu tượng hóa (chương 3, 5)
- Tìm hiểu tiêu chí và vai trò của việc chọn tầng trừu tượng phù hợp
- Viết unit test ở mức trừu tượng cao để đạt được test pyramid
Part 2
- Kiến trúc hướng sự kiện (chương 8–11)
- Giới thiệu các mẫu Domain Events, Message Bus, Handler
- Kích hoạt các tương tác trong hệ thống thông qua sự kiện
- Giải thích cách tích hợp giữa các microservice bằng sự kiện
- Phân biệt sự khác nhau giữa command và event
- Toàn bộ ứng dụng được chuyển thành một hệ thống xử lý message
- CQRS (Command-Query Responsibility Segregation) (chương 12)
- Giới thiệu hiệu quả về mặt cấu trúc thông qua việc tách biệt trách nhiệm command và query
- Bao gồm ví dụ triển khai có và không dùng sự kiện
- Dependency Injection (chương 13)
- Sắp xếp lại các phụ thuộc tường minh/ngầm định
- Tự triển khai một framework dependency injection đơn giản
Phụ lục và hướng dẫn thực hành
- Cách áp dụng vào dự án hiện có (epilogue)
- Việc áp dụng các mẫu vào hệ thống hiện có khó hơn nhiều so với ví dụ đơn giản
- Cung cấp chiến lược áp dụng và tài liệu tham khảo cho việc này
- Thực hành code và ví dụ trên GitHub
- Toàn bộ nội dung của sách được tổ chức thành một dự án ví dụ duy nhất
- Mỗi chương đều cung cấp code qua các branch GitHub
- Cách thực hành:
- Tự mình triển khai theo ứng dụng ví dụ
- Thử áp dụng các mẫu vào chính dự án của mình
- Sử dụng "Exercise for the Reader" của từng chương để viết code luyện tập
Mẹo: Nên checkout branch tương ứng trên GitHub ở phần đầu mỗi chương để học cùng với đoạn code thực sự đang chạy
2 bình luận
Đã có bản tiếng Hàn: Mẫu kiến trúc qua Python
Ý kiến trên Hacker News
Cuốn sách này giống như một mỏ vàng về các mẫu kiến trúc. Tôi thích cách nó giúp chủ đề trở nên dễ hiểu
Một số phần của cuốn sách này rất hữu ích. Đặc biệt là khi nói về các khái niệm không bị giới hạn ở Python hay một ngôn ngữ cụ thể
Tôi xem Python là một ngôn ngữ glue rất tốt
Tôi là lập trình viên TypeScript, nhưng đây là một trong những cuốn sách về kiến trúc tôi yêu thích nhất. Tôi luôn tham khảo nó
Tôi bắt đầu viết Python chuyên nghiệp từ vài năm trước. Tôi đến từ Kotlin và TypeScript, và dù ngôn ngữ này dễ tiếp cận, tôi đã gặp khó khăn trong việc đạt được tính kết dính lỏng và khả năng kiểm thử
Đây thực sự là một trong những cuốn sách lập trình Python xuất sắc. Tôi hơi tiếc vì mã không có static typing, nhưng đó là quyết định có chủ ý của tác giả
Cảm ơn vì đã chia sẻ tài liệu tuyệt vời này
Tôi đã đọc bản paperback của cuốn sách này cách đây khoảng 2 năm rưỡi hoặc 3 năm. Rất thú vị. Nó giữ testing là một chủ đề hạng nhất và liên tục cập nhật theo từng phần bổ sung
Không thấy nhắc đến Polylith. Tôi tự hỏi liệu nó có liên quan không
Cuốn sách này là một bài đọc tuyệt vời. Ba năm trước tôi làm trong môi trường DDD của C#/.NET, và giờ khi xem lại những khái niệm này trong Python, tôi thấy chúng được chưng cất về phần cốt lõi