Misalkan saya telah membuat antarmuka IFolderRepository
dengan 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 DatabaseFolderRepository
dan katakanlah CacheFolderRepositoryDecorator
. Sekarang 'ratusan baris kemudian' Saya ingin menambahkan fungsi folder SkyDrive jadi saya siap untuk menambahkan SkyDriveFolderRepository
. Sayangnya sementara DatabaseFolderRepository
implementasi menggunakan metode sinkron untuk berbicara dengan database, skydrive satu menggunakan banyak async
dan 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 Task
tipe pengembalian (terhadap Anda tidak akan memerlukannya aturan)?
IFolder
antarmuka, mengapa Anda mengandalkan implementasi konkret (Folder
) dalam semua metode Anda?