2

ポリモーフィックなスキーマ/型を作成したいと考えており、ベスト プラクティスに興味があります。次の 2 つの例では、イベント、または(たとえば、それぞれ 15 日ごと、または最初の月曜日ごと)Frequencyを繰り返すことができるスキーマを作成できます。monthly by day of monthmonthly by day of week

最初のものは実験的な抽象マップを使用してこれを達成しますが、その構文は扱いにくいです (IMO)。さらに、実験的なパッケージに含まれていることは、少し心配です。

2 番目のものは を使用しますが、これはfrom a tos/conditionalの値を簡単に強制できないという問題があります。これは、REST API または JSON を処理するときに役立ちます。(一方、これには最適です)。typestringkeywords/eq

一般的なケースでは、次のいずれか、または 3 番目のオプションのいずれかが伝達のベスト プラクティスType A is one of Types #{B C D ...}ですか。

2 つのオプション:

;;OPTION 1
​
(s/defschema Frequency (field (abstract-map/abstract-map-schema
                               :type {})
                              {}))
(abstract-map/extend-schema MonthlyByDOM Frequency
                            [:monthly-by-dom]
                            {:days #{MonthDay}})
(abstract-map/extend-schema MonthlyByDOW Frequency
                            [:monthly-by-dow]
                            {:days  #{WeekDay}
                             :weeks #{(s/enum 1 2 3 4 5)}})

;;OPTION 2
​
(s/defschema MonthlyByDOM "monthly by day of month, eg every 13th and 21st day" {:type (s/eq :monthly-by-dom)
                                                                                 :days #{MonthDay}})
(s/defschema MonthlyByDOW "monthly by day of week, eg first, and third friday" {:type  (s/eq :monthly-by-dow)
                                                                                :days  #{WeekDay}
                                                                                :weeks #{(s/enum 1 2 3 4 5)}})
(s/defschema Frequency (field (s/conditional #(= (s/eq :monthly-by-dom) (do (prn %) (:type %))) MonthlyByDOM
                                             #(= :monthly-by-dow (:type %)) MonthlyByDOW)
                              {:default {:type :monthly-by-dom
                                         :days #{1 11 21}}}))

あまり役に立たない同様の質問:

4

0 に答える 0