Skip to content

varrivoda/Telegraph-Spring-sandbox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

Telegraph-sandbox

This is a sandbox for my fork of Telegraph app, which I wanted to migrate from Guice to Spring

...but didn't succeed on the first attempt due to it's illogical complexity :(

So I did this sandbox. And you know what? This seems to work without any DI container :)

Это сэндбокс моего форка приложения Telegraph, которое я хотел переехать с Джюса на Спринг

... но с первого раза это не вышло, изза странной необычной архитектуры исходного приложения. "В лоб" поменять @Inject'ы на @Autowired не вышло, а постоянные попытки автора инжектить контекст и доставать из него синглетоны руками (особенно в абстрактном классе) меня добили.

Но задачка всё же интересная, поэтому написал этот сэндбокc

Часть 2, прикручиваем Спринг-контекст.

Конфиг с ObjectMapper'ом и @ComponentScan, на все бины @Component, инжекшены пусть пока будут field. Работает!

Часть 3, Node и NodeElement

Прежде чем писать остальные классы, надо реализовать ноды. чтобы приятнее было тестировать, а не писать jsonы для всех объектов вручную %) Чтобы тестировать Node надо написать поддержку Page и CreatePage (классов становится многовато, заведем папки methods и objects)

от сервевра ответ на createPage приходит в таком формате:

{"ok":true,"result":{"path":"My-title-07-21-4","url":"https:\/\/telegra.ph\/My-title-07-21-4","title":"My title","description":"","author_name":"Random author","content":["My content"],"views":0,"can_edit":true}}

Пока что для простоты мы не подерживаем статус результата, поэтому в мок-ответ в Executor'e запишем просто содержимое result.

часть 4, статусы ответа, фикс JsonProperty

Все раюобтает, единственнное что надо поменять названия JsonProperty, т.к. с сервера приходят "_" вместо кэмелКейса Еще у нас есть опшонал проперти, добавим @JsonIgnoreProperties(ignoreUnknown = true) над TelegraphObject вот вопрос,нвдо ли Node делать impplements TelegraphObject? в оригинале так и есть, непонятно пок зачем, пока что оставим

Итак, теперь надо сделать поддержку статусов ответа, создаем TelegraphResponse, параметризованный объектами телеграфа В нем поля Boolean ok, String error и собственно T result, помеченнные @JsonProperty Ну и теперь вреализации каждого Method'a надо что-то поменять, чтобы поолучать TegraphResponse Попробуем просто зассунуть в TypeReference<...>, по идее должно работать. передастся в тип поля result, и Jackson будет искать в ответе его поля. Еще надо в каждом инстансе "Метода" изменить возвращаемое значение на getResult() в случае если getOk=true Вуаля, работает!

Осталось написать все остальные методы. Либо - мы ужеоченьблизко приблизились к оригинальной библиотеке, можно было бы просто на нее навесить Спринговый котекст, но....

Этот странный патттерн проектирования - "Команда", если я не ошибаюсь... - так вот. Как в нём что-либо тестировать? Я хочу написать простой понятный тест - на что мне его писать - на execute(), что ли? Ну тогда скорее уж на deserializeResponse, но он вызывается скрытымобразом от нашего апи , не торчит наружу. Так тестировать,и вообще проектировать, нехорошо... Может стоит переписать библиотеку на другой паттерн?

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages