Обновление постмодернистского ряда более функциональным способом
У меня есть пара классов (а именно book
а также user
). Мне нужно обновить book
установив его lended
слот для t
И его lended-to
заемщику id
,
Я использую Postmodern в качестве бэк-энда к базе данных PostgreSQL
Это то, что я придумал (надеюсь, имена достаточно самоописуемы)
(defmethod lend-book ((to-lend book) borrower) ;borrower is a user instance
(if (book-lent to-lend)
nil
(let (to-lend (get-dao 'book (book-id to-lend)))
(setf (book-lent-to to-lend) (user-id borrower))
(setf (book-lent to-lend) t)
(update-dao to-lend))))
Но это кажется слишком обязательным для меня.
Есть ли более функциональный способ сделать это или мешает Постмодерн?
1 ответ
Решение
Вы изменяете состояние, вот что вы пишете. Я вижу это как идиоматическое.
Я просто вижу две проблемы с вашим кодом:
- Ваш
defmethod
перепутал его лямбда-список:(to-lend book)
, А не наоборот. Это должно дать некоторые предупреждения или ошибки. - Причастие "одолжить" является "одолжено", поэтому слоты должны быть названы
book-lent
а такжеbook-lent-to
,