Skip to content

Instantly share code, notes, and snippets.

@LukasRychtecky
Last active September 8, 2022 16:27
Show Gist options
  • Save LukasRychtecky/1b9c6bc6ab2384283340de29fa21ae0c to your computer and use it in GitHub Desktop.
Save LukasRychtecky/1b9c6bc6ab2384283340de29fa21ae0c to your computer and use it in GitHub Desktop.
clj1.clj
;; factory functions
(defn order-query-of-field1
[v]
{:type :field1, :value v})
(defn order-query-of-field2
[v1 v2]
{:type :field2, :v1 v1, :v2 v2})
(defn order-query-of-field3
[v]
{:type :field3, :value f})
;; DB functions
(defn filter-by-field1 [db query] (throw (RuntimeException. "Not implemented")))
(defn filter-by-field2 [db query] (throw (RuntimeException. "Not implemented")))
(defn filter-by-field3 [db query] (throw (RuntimeException. "Not implemented")))
;; varianta 1
;; ala switch implementace
(defn filter-by
[db query]
(case (:type query)
:field1 (filter-by-field1 db query)
:field2 (filter-by-field2 db query)
:field3 (filter-by-field3 db query)))
(let [repository {} ;; připojení do DB
query (order-query-of-field1 "asdf")
orders (filter-by repository query)]))
;; varianta 2
;; ala switch implementace s parametrizací (DI)
(defn filter-by
[filter-by-field1 filter-by-field2 filter-by-field3 query]
(case (:type query)
:field1 (filter-by-field1 query)
:field2 (filter-by-field2 query)
:field3 (filter-by-field3 query)))
(let [repository {} ;; připojení do DB
query (order-query-of-field1 "asdf")
orders (filter-by (partial filter-by-field1 repository)
(partial filter-by-field2 repository)
(partial filter-by-field3 repository)
query)]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment