Tôi có một giao diện định nghĩa là:Bạn có thể chuyển luồng qua nhiều phương thức không?
public interface IClientFileImporter
{
bool CanImport(Stream stream);
int Import(Stream stream);
}
Ý tưởng là thực hiện bất kỳ dòng tập tin và chạy nó thông qua một loạt các hiện thực của giao diện này để xác định cái nào nên xử lý các tập tin. Một số việc triển khai có thể tìm kiếm một hàng tiêu đề nhất định, trong khi những người khác có thể tìm kiếm một chuỗi byte nhất định, v.v ...
Câu hỏi của tôi là, tôi có thể bỏ qua một luồng như thế này miễn là tôi không bao giờ đóng nó? Mỗi phương pháp sẽ phải chịu trách nhiệm đặt lại luồng vào vị trí 0 nếu cần thiết, nhưng có bất kỳ vấn đề tiềm ẩn nào khác (ngoài an toàn luồng) không? Mã này thực sự có mùi, IMO, nhưng tôi không chắc chắn về cách tốt hơn để làm điều đó.
Tôi không nghĩ đó là một khái niệm tồi ngay từ đầu. Bạn không biết những gì triển khai sẽ cần từ luồng để cung cấp toàn bộ luồng có ý nghĩa. Để đảm bảo rằng việc triển khai không gây rối với luồng, bạn có thể triển khai một số loại trình bao bọc xung quanh Luồng (bắt nguồn từ chính luồng) ngăn chặn bất kỳ phương thức nào sửa đổi luồng cơ bản hoặc bất kỳ thứ gì bạn cần. Ngoài ra, tôi sẽ không yêu cầu thực hiện để thiết lập lại vị trí dòng. Người gọi của CanImport/Import có thể làm điều đó. Kết hợp điều này đảm bảo rằng không có importortr có thể gây hại cho luồng cơ bản. –