我正在创建一个使用外部API的应用程序。但我不希望我的应用程序依赖于API。所以我一直在阅读如何实现这一目标。我读到我想要的东西是松耦合。我想松散地使用我的应用程序的其余部分使用外部API的类。我的问题是如何实现这一目标。如果阅读不同的设计模式,我找不到一个有助于解决我的问题。
public class GoogleCalendarService
{
private const string CalendarId = ".....";
private CalendarService Authenticate(string calendarId)
{
...
}
public void Create(Booking newBooking, string userId)
{
...
InsertEvent(newEvent, userId);
}
private void Insert(Event newEvent, string userId)
{
call authenticate account
....
}
public List<Booking> GetEvents()
{
call authenticate account
...
}
}
以上是我使用外部API的类的代码。在我的应用程序的其余部分中,我使用以下方法使用此类:
public class MyApplication
{
private void MyFunction()
{
GoogleCalendarService googleCalendarService = new GoogleCalendarService();
googleCalendarService.CreateEvent(..., ...)
}
}
我在我的应用程序中的多个位置执行此操作。所以我的问题是:如何将API类与其他类松散耦合?
编辑:我可能想要一个通用日历服务界面,以便在需要时更容易将Google日历服务替换为其他日历服务。
答案 0 :(得分:3)
可以更轻松地将Google日历服务替换为其他日历服务
您要查看的主要模式是Adapter。但是你想与Dependency Injection结合使用。
DI首先:
public class MyApplication
{
// constructor injection
private IGeneralCalendarService _calendarService;
public MyApplication(IGeneralCalendarService calendarService)
{
_calendarService = calendarService;
}
private void MyFunction()
{
_calendarService.CreateEvent(..., ...)
}
}
适配器看起来像
public class GoogleCalendarServiceAdapter : IGeneralCalendarService
{
// implement the interface by calliong the Google API.
}
此外,您将需要Event等的通用类。它们与接口属于同一层。
答案 1 :(得分:2)
您需要围绕该API编写包装器。并使用包装器IO重写该API的每个输出/输入。之后,您可以利用Dependancy Injection来使用您自己的代码。通过这种方式,您可以在该API周围拥有一个抽象层