Member 13462842 Ответов: 0

Является ли это обычной практикой использовать API таким образом


Привет, я прочитал статью, использующую "интерфейс как обратный вызов".
https://www.c-sharpcorner.com/UploadFile/1c8574/delegate-used-for-callback-operation/

затем я вижу, что во многих случаях Api предоставляет интерфейс для потребителя. Интересно, они обычно так работают? Я думаю, что есть 4 шага
вот мой код (пожалуйста, исправьте мой комментарий, если я неправильно понял, спасибо!)

во первых есть Api
class Api
    {
        //Api request passing interface object into method      
        public void StartNewTask(IFurtherProcess Interface_Obj_Feedback_from_user)    
        {
            Console.WriteLine("started task");

          //I am Api , I only tell you I started a task , below further process is up to consumer.

            Interface_Obj_Feedback_from_user.process(); // process is sometime Adding, sometime Subtract 
           
        }

    }
    interface IFurtherProcess
    {   
        void process();       //step 1 : Api declare a Interface with method
    }


затем есть класс для реализации интерфейса потребителем

public class ProcessClass1 : IFurtherProcess      //step 2: Api Consumer design class to implement the interface;
    {
        
        public void process()
        {
            Console.WriteLine("add");
            
        }
    }
    public class ProcessClass2 : IFurtherProcess      //step 2: Api Consumer design alternative class implement the interface;
    {

        public void process()
        {
            Console.WriteLine("sub");
            
        }
    }


тогда есть класс ApiConsumer:

class ApiConsumer    //created by consumer
   {
       public IFurtherProcess _ifp=null;
           public ApiConsumer(IFurtherProcess ifp)   //leave it for main to choose what ifp is ?
       {
           this._ifp = ifp;

       }
      public void CallApiMethod()
       {
           Api cs = new Api();
           cs.StartNewTask(_ifp);
       }

   }


наконец, это главное:

static void Main(string[] args)
      {
          ApiConsumer apiConsumer = new ApiConsumer(new ProcessClass2());  // Step 4:i choose Process2 here!
          apiConsumer.CallApiMethod();
          Console.ReadLine();
      }


Что я уже пробовал:

кроме того, он, кажется, имеет слишком много слоев. Это так называемая "обертка" того, что я делаю выше? main->apiconsumer->api .

Richard MacCutchan

Вы должны спросить человека, который написал статью.

F-ES Sitecore

Как и любая из этих вещей, вы будете использовать их, если это соответствует вашим требованиям. Это фактически другой способ реализации событий. В вашей конкретной реализации вы, вероятно, могли бы уйти с классом Api и просто вызвать методы интерфейса в "CallApiMethod".

Также помните, что это для вас, чтобы предоставить код, который выполняется *после того, как API выполнил свою работу, поэтому в вашем примере add\subtract ProcessClass1\2 не будет выполнять фактическое добавление и вычитание, эти классы будут для любой работы, которая должна быть выполнена после того, как API выполнил свою работу, так что это может быть ведение журнала, обновление дисплея, возможно, запуск второй задачи и так далее.

0 Ответов