松散耦合课程

时间:2018-05-27 18:44:15

标签: c#

我正在创建一个使用外部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日历服务替换为其他日历服务。

2 个答案:

答案 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周围拥有一个抽象层