Является ли это обычной практикой использовать 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 выполнил свою работу, так что это может быть ведение журнала, обновление дисплея, возможно, запуск второй задачи и так далее.