Giả sử tôi đã tạo giao diện IFolderRepositoryvới các phương thức như thế:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
và tôi đã thực hiện DatabaseFolderRepositoryvà cho phép nói CacheFolderRepositoryDecorator. Bây giờ 'hàng trăm dòng sau' Tôi muốn thêm chức năng của các thư mục SkyDrive để tôi sẵn sàng thêm SkyDriveFolderRepository. Thật không may trong khi DatabaseFolderRepositorythực hiện đã sử dụng các phương thức đồng bộ để nói chuyện với cơ sở dữ liệu, skydrive người ta sử dụng rất nhiều asyncvà await. Làm gì trong trường hợp như vậy? Trong trường hợp các phương thức void đánh dấu, nó không đồng bộ không phải là một giải pháp (cần xử lý ngoại lệ). Tôi có nên thay đổi giao diện để trở lại Task<T>? Chắc chắn nó sẽ hoạt động trong ví dụ trên nhưng chúng chỉ là 2 lớp thực hiện giao diện. Hoặc hầu hết các giao diện của tôi có Taskloại trả về (đối với bạn sẽ không cần quy tắc này)?
IFoldergiao diện, tại sao bạn lại dựa vào việc triển khai cụ thể (Folder) trong tất cả các phương thức của mình?