Series Phản Phác Quy Chân – Luận về nguyên lý Separation of Concerns (Chia Để Trị)

Đôi lời lý giải chút về tên series

返璞归真 – Phản phác quy chân: Lúc đạt đến điểm cao nhất, cũng chính là lúc quay lại điểm xuất phát. 
Trong võ học, nó có nghĩa là đạt tới cảnh giới “tối thượng” trong truyền thuyết, quay lại như lúc ban đầu, quên đi tất cả võ học trong thiên hạ, bản thân đã không còn chiêu thức cụ thể, chỉ dựa vào ý cảnh mà đơn giản xử lý.

Võ học được thành lập từ các chiêu thức cơ bản, tuyệt thế võ công cũng từ các chiêu thức cơ bản mà ra. Code học cũng tạo thành từ bit/byte cơ bản, chương trình phức tạp cũng được viết thành từ nhiều module, từ từng dòng code.

Đôi khi, ta đã quá quen với việc dùng thư viện, dùng framework mà quên thì những thứ nằm sâu bên dưới, không nắm được bản chất. Có những vấn đề mà phải nắm rõ bản chất của nó ta mới có thể giải quyết được.

Như cái tên “Phản Phác Quy Chân”, series này không giới thiệu công nghệ hay ngôn ngữ mới, mà sẽ tập trung quay lại những cái bản chất, đơn giản, tinh túy nhất mà ít người quan tâm để ý (Bên tiếng Anh có một từ tương tự : Back to Basic, bỏ qua những cái phức tạp, quay lại những cái cơ bản để hiểu tận gốc vấn đề).

 

Đây là một series khá xưa nhưng rất hay của Code Dạo, nay có hứng thú lại nên mình viết tiếp season 2 của series nha.

Hôm nay, chúng ta cùng tìm hiểu về Separation of Concerns, một nguyên lý thiết kế đã có hơn 35 năm tuổi đời; nhưng vẫn có sức ảnh hưởng rất lớn, và được áp dụng rất nhiều trong thiết kế hệ thống, trong viết code và design các library.

Separation of Concerns là cái gì

Separation là phân tách, concern là vấn đề, Separation of Concerns (SoC) là một design principle (nguyên lý thiết kế) nhằm phân tách 1 chương trình, 1 hệ thống thành nhiều phần, mỗi phần xử lý 1 vấn đề riêng biệt.

Nói nôm na, nó giống như là khái niệm Chia Để Trị trong tiếng Việt. (Đừng lộn với thuật toán chia để trị nhé!)

Việc phân tách chương trình thành nhiều phần, mỗi phần tập trung xử lý 1 vấn đề giúp ta dễ dàng quản lý code, dễ dàng mở rộng và thay đổi chương trình. Việc đọc code, tìm hiểu luồng chạy cũng sẽ đơn giản hơn, vì mỗi module, mỗi phần nhỏ chỉ tập trung giải quyết 1 vấn đề riêng biệt.

Netflix thiết kế API dựa theo nguyên lý SoC https://www.slideshare.net/danieljacobson/netflix-api-separation-of-concerns

Bản thân SoC là một nguyên lý khá lâu đời (có khi còn lớn tuổi hơn mình và anh em đọc bài này); được cụ Dijkstra (thuật toán tìm đường ngắn nhất mà các bạn học đặt theo tên cụ) đề cập tới từ năm 1974.

Nói lý thuyết thì hơi khó hiểu, bạn xem phần dưới để hiểu cách ứng dụng và ví dụ sử dụng nguyên lý này nhé.

Ứng dụng của nguyên lý Separation of Concern

Thật ra, khi bạn phân tách code thành các class, các module, mỗi module xử lý 1 việc nhất định, chính là bạn đang áp dụng nguyên lý Separation of Concert này rồi đấy.

Nguyên lý thiết kế này rất phổ biến, được ứng dụng rất nhiều trong ngành phần mềm:

  • Các mô hình 3 layers, MVC, MVVM… đều dựa trên tiêu chỉ mỗi layer, mỗi phần xử lý một vấn đề riêng. Ví dụ trong mô hình 3 layers, database layer chịu trách nhiệm kết nối và xử lý dữ liệu từ Database, business layer thì xử lý business logic
  • Trong kiến trúc microservice, mỗi service xử lý 1 vấn đề chuyên biệt, không động chạm gì tới dữ liệu của service khác
  • Một trang web bao gồm HTML, CSS, JS, mỗi thứ có 1 việc làm riêng. HTML là layout của trang web, CSS để thay đổi style mông má cho web, còn JS thì thêm interaction từ người dùng
  • Với các thư viện/framework front-end mới như React/Angular/Vue, một trang web sẽ được tách thành nhiều component nhỏ. Mỗi component chỉ hiển trị, xử lý một phần duy nhất
  • Còn nhiều nhiều lắm mà kể hết chắc thêm vài trang A4 nữa….
Ví dụ dễ hiểu về HTML/CSS/JS

 

Ngoài ra, Separation of Concern còn là tiền đề cho rất nhiều khái niệm, nguyên lý thiết kế khác:

  • Modular programming tức là 1 phần mềm nên hỗ trợ nhiều module, cần cái nào thì gắn vào, không cần thì gỡ ra.
  • Theo Single-Responsbility Principle, mỗi class chỉ nên làm 1 việc duy nhất, không nên gom quá nhiều chức năng vào 1 class
  • ….

Tạm kết

Các bạn thấy đấy, những thứ căn bản như Separation of Concern rất ít người dạy, ít người quan tâm, vì nó không hot như React, Python, NodeJS,…. cũng không ai yêu cầu khi tuyển dụng.

Tuy vậy, nắm được những thứ nền tảng này, bạn có thể hiểu nguyên nhân tại sao người ta design thư viện React như vậy, tại sao phải chia thành Model, View, Controller trong mô hình MVC. Những kiến thức nền tảng này không hề mau lỗi thời như công nghệ/framework, mà sống rất dai vài chục năm vẫn chưa chết.

Đấy, nếu các bạn quan tâm về những thứ hay ho, đi sâu vào tận gốc vấn đề như thế này; hãy để lại comment nhé! Nhiều bạn quan tâm thì mình sẽ viết nhiều bài trong series này hơn hihi.

 

“[Separation of Concerns], even if not perfectly possible, is yet the only available technique for effective ordering of one’s thoughts, that I know of.” — Edsger W. Dijkstra

Nguồn:

2 thoughts on “Series Phản Phác Quy Chân – Luận về nguyên lý Separation of Concerns (Chia Để Trị)”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s