Jesteśmy zależni od usługi innej firmy, która ujawnia gigantyczny interfejs, którego potrzebujemy tylko 3 metody. Dodatkowo interfejs często się zmienia ...
W naszym projekcie postanowiłem zawinąć interfejs w klasę i ujawnić tylko metody, których potrzebujemy.
Ale nie jestem pewien, jak powinienem obsługiwać zwracane wartości ... Interfejs zwraca obiekt typu Storage. Wewnętrznie mamy typ, StorageModelktóry jest naszą wewnętrzną reprezentacją Storage.
Co powrócisz w programie mapującym: Storagelub StorageModel? Mamy usługę DataService, StorageServicektóra uzyskuje zależność od wstrzykniętego opakowania.
Obecnie robię to w zasadzie tak:
public class StorageService
{
private readonly IExternalStorageWrapper externalStorageWrapper;
public StorageService(IExternalStorageWrapper externalStorageWrapper)
{
this.externalStorageWrapper = externalStorageWrapper;
}
public StorageModel GetStorage(int storageId)
{
return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel();
}
}
public class ExternalStorageWrapper : IExternalStorageWrapper
{
public Storage GetStorage(int storageId)
{
using(var ext = new ExternalStorage())
{
return ext.GetStorage(storageId);
}
}
}
Co byś powiedział:
- Czy to dobrze, jak powyżej, że opakowanie zwraca
Storageobiekt zewnętrzny, a wewnętrznyStorageServicezwraca wewnętrznyStorageModel? - A może zwróciłbyś
StorageModeljuż opakowanie?