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 ý.
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:
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.
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.
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.
Sorry nha, dạo này tớ bận quá!
Vì cậu dùng delegate rồi (cậu đang thiết kế higher order function - đó là một cách tốt để cậu tự custom behavior từ nơi gọi tới method), và nếu cậu không có lý do gì để luôn đảm bảo chỉ có 1 instance của class đó, cậu chỉ cần 1 class bình thường (FileProccessor) là ổn.
Nếu cậu cần 1 instance thôi, và nếu cậu có thể dùng DI container (C# chắc có đó), cậu nên register object của class mà cậu có vào đó, và để DI container lo việc inject object của cậu vào nơi cậu cần dùng.
Biện pháp cuối cùng, nếu như cậu:
Có phải nguyên nhân là do static method không phải là pure function và khi test static method kết quả bị ảnh hưởng bởi lần thực thi trước đúng không bác?
Google phát là có kết quả mà nhỉ