Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HW 18 done, but without doc and test #30

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

skylightis666
Copy link

Извините, что без комментов, постараюсь попозже добавить. На счёт значений размеров буфферов и параллелизма для пайплайнов не думал вовсе, кроме случая с вытаскиванием страниц, остальные от балды поставил. Кэширование сделал, но без персиста в бд, тоже может потом добавлю.

isyufu pushed a commit to isyufu/Clojure-Developer-2023-10 that referenced this pull request Mar 2, 2024
(def pokemons-url (str base-url "/pokemon"))
(def type-path (str base-url "/type"))
(def type-url (str base-url "/type"))
(def cache-wrapper
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Больше похоже не на cache-wrapper, а на caching-request.
Чтобы улучшить читаемость кода (уменьшить вложенность) я бы предложил вытащить атом в def наружу (он в любом случае существует в единственном экземпляре) и, если есть желание, чтоб это был все-таки wrapper, то можно передавать функцию, которая делает запросы как аргумент сюда.
При текущем подходе все работать будет, так что эту часть в любом случае считаю выполненной.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Дополнительно обращу внимание, что если нужно сохранять состояние атома при работе в репле, можно использовать defonce - это достаточно распространенная практика

entities-parsed>))

(defn construct-type-lang-hierarchy [name m]
[(get-in m [:language :name])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(-> m :language :name) работает чуть быстрее get-in. Обычно get-in используется, когда ключи лежат в варах, или в качестве них используются строки/числа. Не ошибка, но лучше поменять.

{name (get-in m [:name])}])

(defn parse-type-names [response]
(let [name (:name response)]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

опять же не ошибка, но я бы не рекомендовал использовать name в качестве байндинга, т.к. name это функция из кора и использование этого символа может привести к странным проблемам в дальнейшем

(extract-types-by-lang lang))]
(->> (async/take limit (get-entities-data pokemons-url parse-pokemon-types))
(async/into {})
<!!
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

основная проблема в том, что в начале запросятся список покоменов, лишь затем дополнительные данные по ним, это можно делать асинхронно. Ок, если так и задумано, такое решение имеет место, но если цель была асинхронно запрашивать по мере поступления данных, то работать будет не совсем так.


(defn extract-types-by-lang [lang types-map]
;TODO transducer smells below
(partial mapv ((reduce (partial merge-with into) {} (vals types-map)) lang)))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я бы рекомендовал этот кусок кода упростить, понять, что тут происходит возможно, но читаются такой код достаточно тяжело, особенно учитывая, что он не делает экстракт, а возвращает экстрактор)

[& {:keys [limit lang] :or {limit 50 lang "ja"}}])
[& {:keys [limit lang] :or {limit 50 lang "ja"}}]
(let [pokemon-types (->> (get-entities-data type-url parse-type-names)
(async/into {})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут в любом случае будут запрашиваться и складываться в кеш все типы, я бы не рекомендовал так делать, например, на коротких выборках большинство из них может не понадобится в реальном примере.
Вместо этого можно сходить за типом по мере необходимости.

(->> (async/take limit (get-entities-data pokemons-url parse-pokemon-types))
(async/into {})
<!!
(fmap pokemon-types)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

интересно, почему решили использовать fmap, а не обычный map

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants