Avatar
1
Thành Vương Beginner
Thành Vương Beginner
Mỗi Service class có 1 interface?
Mọi người cho e hỏi là về vấn đề mỗi service class sẽ có 1 interface. Trước giờ e đều làm là cứ 1 interface thì sẽ tạo 1 class impl và gắn @Service cho nó. Nhưng em mới có đọc 1 bài là có thực sự cần thiết như vậy không khi dự án nhỏ, k có unit test hay gì hết. Em muốn biết là cuối cùng mình nên như nào thì vẫn hợp lý hơn ạ?
  • Answer
spring boot
Remain: 5
1 Answer
Avatar
monkey Beginner
monkey Beginner
  1. Thực tế thì việc tạo ra 1 cặp interface - impl là tương đối hợp lý theo lý thuyết rằng mọi thứ có thể thay đổi và khi thay đổi thì càng nhiều lớp trìu tượng thì sự ảnh hưởng sẽ càng ít đi. Ví dụ, service của bạn ở phiên bản 1 đang gọi lấy data từ MySQL, ở bản 2 sẽ lấy từ Redis, thì thay vì sửa trực tiếp vào lớp ServiceV1 thì bạn sẽ deprecated cái lớp V1 đi và viết lớp V2 mới, trong khi ở tầng controller vẫn không phải thay đổi gì do vẫn sử dụng interface.

  1. Tuy nhiên, hiếm có khi nào có sự thay đổi quá lớn giống như ví dụ vừa nêu, với cả là bây giờ các công cụ quản lý version như git, hay docker đã làm rất tốt, nếu code lỗi thì gọi rollback cũng dễ nên việc tạo ra lớp Impl lại cảm giác là không cần thiết.

Vậy kết luận là: nếu bạn lười, thì bạn không cần thiết phải tạo ra cặp interface - impl. Tuy nhiên nếu bạn không lười, thì tạo ra cặp interface - impl thì sẽ tốt hơn. Nhìn chung thế nào cũng được, và mình thấy hiện tại bạn đang tổ chức theo cặp kia rồi thì cứ yên tâm tiếp tục theo cách đó nhé.

  • 0
  • Reply