Gần đây mình bắt đầu tìm hiểu sâu về một trong những nguyên tắc hết sức căn bản trong lập trình là “Decoupling” (Tạm dịch là Nguyên tắc chia tách code theo class/module/package độc lập). Nguyên tắc này nghe có vẻ đơn giản nhưng thực tế triển khai nó không hề dễ dàng. Tuy nhiên khi áp dụng nó tốt mình thấy code trở lên sáng sủa hơn rất nhiều. Một người khi tham gia vào dự án không cần biết những logic quá phức tạp ở đằng sau mà chỉ cần biết được phần riêng của module đó đã có thể bắt đầu được rồi. Ví dụ một số pattern phổ biến sử dụng nguyên tắc Decoupling:

MVC: Đây là có lẽ là một trong những pattern kinh điển trong việc phát triển Web. Việc chia tách Model — View — Controller khiến cho code trở lên sáng sủa, tăng khả năng tái sử dụng, cũng như khiến cho việc phối hợp làm việc giữa các thành viên, bảo trì, mở rộng trở lên dễ dàng hơn rất nhiều.

Bạn đang xem: Decoupling là gì

OOP (object-oriented Programming): Đây là có lẽ cũng là pattern kinh điển được áp dụng trong rất nhiều dự án. OOP khiến cho việc tái sử dụng, mở rộng và bảo trì trở lên dễ dàng hơn rất nhiều. Logic cũng được chia tách khiến cho việc code dễ hiểu hơn. Tuy nhiên nếu quá lạm dụng OOP, sử dụng quá nhiều việc kế thừa, overwrite… thì lại khiến cho code mất đi tính đơn giản vốn có của nó.

Microservices: Đây là một Pattern hot trong thời gian gần đây. Microservices cũng là việc chia tách những logic phức tạp của hệ thống thành những phần nhỏ cực kỳ đơn giản. Tất nhiên việc vận hành hệ thống thiết kế bằng Microservices không hề đơn giản, việc thiết kế cũng không dễ. Tuy nhiên việc hiểu từng phần nhỏ thì lại rất đơn giản. Microservices tách biệt việc thiết kế, vận hành và lập trình thành những nhiệm vụ riêng biệt. Và phần phải làm nhiều nhất là lập trình lại trở thành những công việc đơn giản hơn rất nhiều.

Xem thêm: Processed Food Là Gì - Định Nghĩa, Ví Dụ, Giải Thích

Nghĩ rộng ra khỏi lập trình, Decoupling được áp dụng để có thể có được cả những mảng lớn ví dụ như Dropship. Việc tách biệt từng phần của việc bán hàng: Bán hàng, quản lý inventory, thanh toán, sản xuất, logistic… khiến cho dropship trở thành hiện thực. Thậm chí nghĩ rộng ra một chút ta sẽ thấy một xu hướng của việc phát triển đó là thay vì việc xây dựng hệ thống làm mọi thứ thì bây giờ người ta xây dựng hệ thống có thể tích hợp với nhiều thứ nhất có thể. Và để làm được việc đó Decoupling chính là nguyên tắc quan trọng nhất trong thiết kế.

Quay lại một chút với bài toán thực tế mình đang phải giải quyết, đó là bài toán chatbot. Khi triển khai một thời gian mình nhận ra thách thức lớn khi xây dựng bài toán chatbot. Có quá nhiều thứ chưa thể lường hết được: quá nhiều kịch bản có thể xảy ra, quá nhiều phần có thể cần tích hợp, rất nhiều bài toán con cần phải giải quyết, có thể phải hỗ trợ nhiều platform khác nhau, hệ thống cần handle một lượng lớn traffic…. Túm lại có rất nhiều thứ cần phải dự trù cho tương lai. Do vậy khi thiết kế chatbot, việc decoupling hệ thống là một trong những tiêu chí tiên quyết để xây dựng bài toán chatbot. Việc tách nhỏ các Module/Package không phải chỉ đơn giản là sự chia tách vật lý (chia file, chia thư mục, chia class) mà quan trọng hơn phải chia tách logic:

Các module độc lập về mặt logic, module này không cần thiết phải hiểu logic của module khác.DRY — Don’t repeat yourselfSử dụng tham trị thay cho tham biến nếu có thể, hạn chế các biến global… (chỗ này chờ anh em bổ sung giúp nữa)

Khi thực thi tốt việc Decoupling thì có rất nhiều điểm lợi có thể nhìn thấy:

Hệ thống đơn giản hơn, một người mới dễ dàng tham gia vào để phát triển các tính năng không cần thời gian tìm hiểu quá nhiều.Hệ thống dễ mở rộng hơn, có thể mở rộng từng phần mà không ảnh hưởng đến các thành phần khác.Hệ thống dễ bảo trì hơn do code dễ hiểuHệ thống dễ dàng tích hợp hơn, bởi việc tích hợp chỉ cần ảnh hưởng đến 1–2 module mà không ảnh hưởng đến phần còn lại.

Một số bài viết với chủ đề liên quan


Là dân lập trình, chắc hẳn các bạn cũng từng ít nhất một lần nghe đến Law of Demeter (LoD), tạm dịch là Nguyên tắc…


Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *