С C#, как мне аккуратно инкапсулировать API в объекты данных? - PullRequest
0 голосов
/ 07 мая 2020

Если бы API был внешним объектом, я бы использовал общие c функции, например:

static T ApplyTemplate<T> (T target, T template) where T : IApiObject {
  foreach (Object prop in template.properties) {
    if (prop != null) {
      // call API put for that property, using 
      // the id of the input object.
      API::Put(target.id, prop.name, prop.value);
      return API::Get(target.id);
    }
  }
}

result = API::ApplyTemplate(target, template);

Но я считаю этот стиль API очень неуклюжим. Я бы предпочел работать непосредственно с объектом и встроить API в объект данных.

o = new Api.Foo()
o.id = 1;
o.Load; // Retrieve attributes using the API.
o.bar = 'Test';
o.baz = 42;
o.Save; // Send changes using the API.

Проблема в том, что у меня есть 40 объектов с почти идентичным кодом для API, и я проклят если правильный способ справиться с этим - переписать код для каждого объекта. Я хочу определить API в родительском классе или в классе интерфейса, но не могу понять, как это правильно написать. Невозможно определить параметры общей функции c как принадлежащие к тому же типу, что и this, и каждый раз, когда я пытаюсь подойти к этому, эта проблема сбивает меня с толку. повторение полностью шаблонного кода в каждом соответствующем объекте, но я хотел бы знать способ получше.

Обратите внимание, что API активно использует JSON, и объекты, в которых я бы хотел избежать повторного написания кода снова и снова начал свою жизнь как объекты Newtonsoft. Json [DataContract].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...