SO SÁNH MVC VÀ 3-TIER


Nhân dịp có một bạn hỏi về sự khác nhau giữa MVC và 3-tier, tôi xin nói một chút về sự khác nhau giữa thiết kế và kiến trúc phần mềm (nguyên nhân và kết quả có vẻ chẳng liên quan gì với nhau nhỉ 😁).

ℹ️ Design pattern và Architecture

👉 Khi thiết kế một ứng dụng, ta có 2 mức độ thiết kế: – Một là ở mức các class, tức tìm ra các lớp nào, thuộc tính, quan hệ giữa chúng, sự thay đổi trạng thái của các object… Ta có thể kể ra vài lược đồ mô tả các thành phần ở cấp độ này như: class diagram, sequence diagram, state diagram… các bạn mới học hoặc viết các ứng dụng nhỏ sẽ phải làm quen với việc thiết kế ở cấp độ này.

– Hai là mức độ component: Một component là một đơn vị triển khai, ví dụ như một file exe, một thư viện DLL… Trong một component có thể chứa nhiều class. Các class được đặt vào chung trong một component thông thường phải phục vụ cho cùng một actor, và cùng phục vụ chung một mục đích nào đó.

Khi ở cấp độ component, ta sẽ quan tâm đến mô hình triển khai của component đó. Nó sẽ được tham chiếu đến bởi chương trình chính và chạy trong cùng memory space với chương trình chính, hay sẽ được triển khai lên một máy chủ J2EE, vòng đời được quản lý bởi EJB container. Hoặc một cách triển khai phổ biến khác là đưa lên một máy chủ web, các component giao tiếp với nhau qua các lời gọi dựa trên giao thức HTTP, máy chủ web đó thậm chí sẽ được chạy trên một máy tính khác, hoặc đưa vào trong một container.

👉 Ở đây ta sẽ không đi sâu vào thiết kế các class hay các component như thế nào, mà chỉ nói đến mức độ chi tiết khác nhau giữa chúng. Ở mức độ class, chúng ta quan tâm nhiều đến sự phụ thuộc, tính năng của các class. Ở cấp component, ta cũng có cùng mối quan tâm như vậy (nhưng là với component), ngoài ra ta còn phải nghĩ đến việc cho các component đó chạy và nói chuyện với nhau như thế nào. Việc một hệ thống có khả năng phân tán hay không, hoặc mức độ chịu tải, bảo mật, tự sửa lỗi… phụ thuộc rất lớn vào người thiết kế ở mức độ này.(Khi nói đến thiết kế hệ thống ở mức độ này ta có thể gọi là kiến trúc hệ thống, người chuyên làm việc này ta gọi là kiến trúc sư phần mềm).

👉Tổng kết lại, ta tạm hiểu kiến trúc phần mềm là thiết kế tổng thể của cả phần mềm, tập trung vào việc thiết kế các component và mô hình triển khai chúng. Ở cấp độ này ta tập trung vào hiệu năng, khả năng bảo trì, tức là làm sao cho các component có thể hoạt động tốt, chứ không quan tâm đến tính năng, bởi các tính năng sẽ được cung cấp bởi từng component (giống như trò chơi Lego vậy). Kiến trúc phần mềm cũng có các quy tắc thiết kế cũng như các “mẫu kiến trúc”, như microservice hay 3-tier.

Khi đi vào từng component, ta tập trung vào việc thiết kế ra các lớp để hiện thực hóa một tính năng nào đó, ở đây cũng sẽ có các “mẫu thiết kế” – design pattern. Quay lại với vấn đề MVC và 3-tier, ta có MVC là một design pattern (thuộc tầng Presentation nếu áp dụng 3-tier), khi làm việc với nó ta quan tâm sẽ có các class nào, các thuộc tính của chúng là gì. Trong khi đó, 3-tier lại quy định sẽ có các tầng (tier), hay nói cách khác là các component nào.

Nếu vẫn chưa hiểu 😢, ta hãy thử xem xét một design pattern khác đơn giản hơn: Factory. “In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created. This is done by creating objects by calling a factory method—either specified in an interface and implemented by child classes, or implemented in a base class and optionally overridden by derived classes—rather than by calling a constructor.” (Theo wikipedia)

Factory design pattern cho phép lớp sử dụng có thể tạo ra đối tượng và không cần biết chính xác kiểu của đối tượng được tạo ta (xem ví dụ). Khi nói về một design pattern kiểu như vậy, ta tìm hiểu xem nó có những class nào, mỗi class có vai trò gì, tức chúng ta tập trung vào cấp độ chi tiết (ở mức các class).Hi vọng nói tới đây các bạn có thể hiểu được, nếu vẫn chưa thì có lẽ chỉ có một cách – chính xác và hiệu quả nhất: Hãy thử thiết kế một hệ thống lớn và tìm hiểu xem mình sẽ gặp những vấn đề gì nhé.

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