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, StorageModel
który jest naszą wewnętrzną reprezentacją Storage
.
Co powrócisz w programie mapującym: Storage
lub StorageModel
? Mamy usługę DataService, StorageService
któ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
Storage
obiekt zewnętrzny, a wewnętrznyStorageService
zwraca wewnętrznyStorageModel
? - A może zwróciłbyś
StorageModel
już opakowanie?