Моя проблема в том, что я имею дело с RESTful API, который возвращает информацию об объектах, и при написании классов для их представления я не уверен, как лучше всего обрабатывать все возможности статуса доступности каждой переменной. Из того, что я могу сказать, есть 5 возможностей: ИнформацияКак обрабатывать сложную доступность информации в ООП из RESTful API
- доступен
- не был запрошен
- в данный момент запрашивается (асинхронно)
- недоступен
- не применяется
Таким образом, при наличии объекта, представляющего его данные со значением или значением null, его не обрезают. Чтобы дать более конкретный пример, я работаю с API об Конгрессе Соединенных Штатов, поэтому проблема такова:
Я запрашиваю информацию о счете, и в нем содержится заглушка о законодателе-спонсоре. В конечном итоге мне необходимо запросить всю информацию об этом законодателе. Не все законодатели будут иметь всю информацию. Те, кто находится в Палате представителей, не будут иметь сенатский класс (шестилетние сроки сенаторов будут пошатнуты, так что третий срок истекает каждые два года, Дом полностью переизбирается каждые два года). У некоторых не будет идентификатора Twitter, просто потому, что у него его нет. И, конечно, если я уже запросил информацию, я не стал бы просить ее снова.
Там есть пара опций, которые я вижу:
я могу создать объект законодателем и заполнить его с тем, что информация у меня есть, но тогда я должен иметь какой-то механизм отслеживания доступности информации с добытчиками и сеттеров , Это то, что я делаю прямо сейчас, но для повторного кода требуется много.
я мог бы создать отдельный класс для сокращенных объектов и заменить их, когда я получаю больше с неизменными «полными» объектами, но тогда я должен быть очень осторожными о замене всех ссылки на них, а также пройти через кучу обручи для недоступной, и особенно, неприменимой информации.
Итак, мне просто интересно, что другие люди берут на эту проблему. Существуют ли другие (лучше?) Способы решения этой сложности? В чем преимущества и недостатки различных подходов? Что я должен учитывать, что я пытаюсь сделать при выборе подхода?
[Примечание:. Я работаю в Objective-C, но это не обязательно специфичные для данного языка]
Очень согласился. Этот связанный вопрос (и ваш (принятый) ответ на него) превосходны; ваш ответ, в частности, звездный. Я могу от него отстраниться, чтобы оправдать некоторые решения моему руководству ... –