Cách thiết kế 1 lớp gồm các hàm dùng chung

Mn có thể chia sẻ nếu mn cần một lớp gồm các hàm dùng chung (trên Webapp ) có thể gọi ở bất kỳ đâu, thì mn sẽ chọn thiết kế như nào ạ?

Cách em hay làm là tạo 1 lớp gồm các hàm tĩnh ( không biết vậy có tối ưu không ạ ). Cảm ơn mn đã góp ý.

Tuỳ vào nhu cầu sử dụng:

  • Extension method
  • Dependency Injection
  • Singleton
  • Static helpers
2 Likes

Như @LocNguyenXuan99 đề cập, tuỳ vào nhu cầu sử dụng.
Việc cậu làm là tạo class Utility (chứa các method mà không thuộc vào bất cứ object nào, và để nó static) để sử dụng. Đây là cách làm khá phổ biến, dễ cài đặt, nhưng cũng có nhiều drawback.

  • Nhìn chung, cậu sẽ khó test trên method static hơn là method thông thường. Vì rất khó để mock/stub method static (không có polymorphism thì điều này gần như không thể).
  • Cậu có thể gặp vấn đề về tổ chức source code.
    Utilitiy class (class chứa static method) đi ngược lại OOP (cậu không có object nào do tất cả method static có thể gọi được thông qua class. Không có encapsuation, inheritance, polymorphism gì có thể áp dụng được). Nếu cậu quá lạm dụng việc này, cậu sẽ có source code toàn static method.

Tất nhiên, nếu cậu có một vài method không có bất cứ side effect gì (như xử lý string, làm các phép toán, etc), dùng Utility class không có vấn đề gì. Nếu đó không phải use case của cậu, cậu nên đề cập rõ hơn use case của cậu, bọn tớ sẽ tư vấn phù hợp hơn.

3 Likes

Em chào 2 bác @LocNguyenXuan99, @library

Use case của e là xử lý file . E định tạo 1 lớp như trên e trình bày (gồm toàn static method) , lớp gồm 1 hàm public A, trong A gọi đến hàm B,C,D, trong đó hàm C là 1 delegate - là tham số của hàm A ( vì hàm B với D lúc nào cũng chỉ làm 1 việc cố định còn C sẽ tùy vào từng loại - các công việc không hề giống nhau ).

Em có tìm hiểu qua Singleton nhưng đến đoạn Thread safe gì đó e thấy không ổn lắm.

Mong 2 bác tư vấn e usecase này.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?