Single Responsibility Principle trong Design Pattern

Single Responsibility Principle là nguyên tắc đầu tiên trong 5 nguyên tắc SOLID dành cho việc thiết kế theo hướng đối tượng giúp cho class chúng ta viết ra dễ hiểu và dễ maintain. Đối với nguyên tắc này, khi định nghĩa một class, chúng ta chỉ định nghĩa cho nó một nhiệm vụ duy nhất, liên quan đến một khía cạnh duy nhất, giải quyết một bài toán duy nhất. Và khi đó, khi làm việc với class đó, chúng ta chỉ đơn giản thêm mới hoặc chỉnh sửa code để giải quyết nhiệm vụ, bài toán đó mà thôi.

Ví dụ, để quản lý sinh viên, nếu chúng ta ôm đồm định nghĩa hết tất cả các thao tác liên quan đến sinh viên trong một class như sau:

thì việc maintain ứng dụng này rất phức tạp. Student thì như tên gọi, chỉ nên quản lý các thuộc tính của Student như tên, tuổi. Việc quản lý thông tin thêm mới, cập nhập thông tin số lần tham dự các môn học nên do một class khác quản lý, khi cần chúng ta có thể sử dụng class này để lấy thông tin. Thời khoá biểu thì thường sẽ là thời khoá biểu của một lớp nên việc định nghĩa code lấy thời khoá biểu trong class Student cũng không hợp lý.

Chúng ta có thể viết lại class trên với 3 class như sau:

Như các bạn thấy, với cách viết lại như trên, class Student chỉ đơn giản là quản lý các thông tin cá nhân liên quan đến Student.

Để quản lý việc tham dự lớp học, mình introduce class AttendanceManagment giúp chúng ta có thể thêm mới và lấy thông tin tham dự lớp học của một sinh viên dựa vào studentId. Việc introduce class này giúp chúng ta sau này dễ mở rộng ứng dụng, ví dụ như giờ mình cần xem tình hình tham dự lớp học của tất cả sinh viên, mình có thể sử dụng class này để làm điều đó.

Class ClassManagement thì dùng để quản lý tất cả thông tin liên quan đến lớp học như thời khoá biểu, thầy cô giáo chủ nhiệm, các hoạt động ngoại khoá, … Các bạn có thể dễ dàng thêm mới mà không nhập nhằng, lộn xộn.

Luôn suy nghĩ về Single Responsibility Principle là một thói quen tốt giúp các bạn viết code tốt hơn đó các bạn!

Để lại một bình luận

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 *