Size: a a a

Clojure — русскоговорящее сообщество

2020 June 11

Н

Никита in Clojure — русскоговорящее сообщество
Никита
Я сейчас переделал, разбил не по уровням, а по зоне ответственности. Хочу посмотреть как оно будет в деле
Даже запушил сейчас, хоть надо дорабатывать, если вам интересно, можете посмотреть https://github.com/floyernick/Init/tree/new-design
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Я для себя золотую середину нашел в том, что нужно по максимуму писать чистых функций и стараться держать состояние в небольшом количестве мест. Остальное вроде немного вода (понятно, что по "бизнес смыслу" код также стоит группировать)
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Mikhail Borisov
Я для себя золотую середину нашел в том, что нужно по максимуму писать чистых функций и стараться держать состояние в небольшом количестве мест. Остальное вроде немного вода (понятно, что по "бизнес смыслу" код также стоит группировать)
вот тут соглашусь, но сдвину это еще и на домен. Чистый домен, а дальше хоть трава не расти. Можно, конечно еще больше избавляться от сайд эффектов, но слишком сложно становится.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
(fun () -> ())
вот тут соглашусь, но сдвину это еще и на домен. Чистый домен, а дальше хоть трава не расти. Можно, конечно еще больше избавляться от сайд эффектов, но слишком сложно становится.
А что значит чистый домен? Модели без мутирования?
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Mikhail Borisov
А что значит чистый домен? Модели без мутирования?
Домен, который состоит только из чистых функций. И вообще живет в вакууме, не зная про какая база, как имейл отправить и всё такое.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
(fun () -> ())
Домен, который состоит только из чистых функций. И вообще живет в вакууме, не зная про какая база, как имейл отправить и всё такое.
Окей, согласен
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Вообще, слышал, но не проверял, что в эпоху развития ООП какая-то теория развивалась, типа Liskov substitution principle и пр.
SOLID
источник

NA

Nikolay Artamonov in Clojure — русскоговорящее сообщество
(fun () -> ())
чистый домен + репозитории и сервис, который умеет их связывать, но логики не содержит
А есть такой пример в коде?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Солид это ФП)
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Nikolay Artamonov
А есть такой пример в коде?
let add ownerName text = asyncResult {
   let! id = IdGenerator.generate() |> FeedbackId.Create
   let! ownerName = ownerName |> FeedbackOwnerName.Create
   let! text = text |> FeedbackText.Create

   let! feedback = FeedbackDomain.create id ownerName text DateTime.UtcNow

   let! feedbackRead = feedback |> Mapper.Domain.Feedback.toRead    
   do! FeedbackRepo.add feedbackRead

   return feedbackRead
}

вот, не кложур да еще и монады.... но там монада это что-то типо (f/ok-> (load)  (validate-request-status)  (pull-request-body))
источник

Н

Никита in Clojure — русскоговорящее сообщество
Nikolay Artamonov
А есть такой пример в коде?
+, интересно глянуть
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
я бы и на Кложе так писал
источник

Н

Никита in Clojure — русскоговорящее сообщество
(fun () -> ())
let add ownerName text = asyncResult {
   let! id = IdGenerator.generate() |> FeedbackId.Create
   let! ownerName = ownerName |> FeedbackOwnerName.Create
   let! text = text |> FeedbackText.Create

   let! feedback = FeedbackDomain.create id ownerName text DateTime.UtcNow

   let! feedbackRead = feedback |> Mapper.Domain.Feedback.toRead    
   do! FeedbackRepo.add feedbackRead

   return feedbackRead
}

вот, не кложур да еще и монады.... но там монада это что-то типо (f/ok-> (load)  (validate-request-status)  (pull-request-body))
А что у вас репозиторий из себя представляет? Набор методов для хранения бизнес-сущности?
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Никита
А что у вас репозиторий из себя представляет? Набор методов для хранения бизнес-сущности?
да, примерно так, только про у него своя схема, а у домена своя. Mapper умеет это все из DB<->Domain гонять
источник

Н

Никита in Clojure — русскоговорящее сообщество
(fun () -> ())
да, примерно так, только про у него своя схема, а у домена своя. Mapper умеет это все из DB<->Domain гонять
А почему решили свою схему, вместо того, чтобы доменные объекты кидать?
источник

ch

central hardware in Clojure — русскоговорящее сообщество
Здраствуйте, запускаю clojure deps проект, запуск через командую строку работает, однако если запускать через idea cursive на стандартных настройках, idea запускает проект, но без зависимостей, как починить?
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Никита
А почему решили свою схему, вместо того, чтобы доменные объекты кидать?
я это уже проходил( любая база сильно протекает в домен. Даже такая простая в использовании моделей как Mongo, все равно требует навесить аттрибуты. А это значит что домен уже знает что-то про базу это во-первых. Во-вторых это то что я пользуюсь такой штукой, что у меня каждое поле это кастомный тип, то есть не UserName: string, а UserName: UserName, и такую модель он не сможет сохранить. Ну и в-третьих не всегда оно может 1к1 маппиться
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
в целом поддерживать 2 слоя и маппер (не автоматический) в одного можно достаточно спокойной, как оно больше будет - пока не знаю. Я все еще ищу что плохо работает
источник

Н

Никита in Clojure — русскоговорящее сообщество
(fun () -> ())
я это уже проходил( любая база сильно протекает в домен. Даже такая простая в использовании моделей как Mongo, все равно требует навесить аттрибуты. А это значит что домен уже знает что-то про базу это во-первых. Во-вторых это то что я пользуюсь такой штукой, что у меня каждое поле это кастомный тип, то есть не UserName: string, а UserName: UserName, и такую модель он не сможет сохранить. Ну и в-третьих не всегда оно может 1к1 маппиться
Хм, не сталкивался с тем, что надо лишнее что-то докидывать. Ну а если у вас кастомные типы то да, другого варианта нет
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Никита
Хм, не сталкивался с тем, что надо лишнее что-то докидывать. Ну а если у вас кастомные типы то да, другого варианта нет
а ты попробуй Id не Id назвать))
источник