Misalkan saya telah membuat antarmuka IFolderRepositorydengan metode seperti itu:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
dan saya sudah menerapkan DatabaseFolderRepositorydan katakanlah CacheFolderRepositoryDecorator. Sekarang 'ratusan baris kemudian' Saya ingin menambahkan fungsi folder SkyDrive jadi saya siap untuk menambahkan SkyDriveFolderRepository. Sayangnya sementara DatabaseFolderRepositoryimplementasi menggunakan metode sinkron untuk berbicara dengan database, skydrive satu menggunakan banyak asyncdan await. Apa yang harus dilakukan dalam kasus seperti itu? Dalam kasus metode void menandainya async bukanlah solusi (perlu penanganan pengecualian). Haruskah saya mengubah antarmuka untuk kembali Task<T>? Tentu itu akan bekerja dalam contoh di atas tetapi mereka hanya 2 kelas implementasi antarmuka. Atau haruskah sebagian besar antarmuka saya memiliki Tasktipe pengembalian (terhadap Anda tidak akan memerlukannya aturan)?
IFolderantarmuka, mengapa Anda mengandalkan implementasi konkret (Folder) dalam semua metode Anda?