Last active
September 8, 2022 16:27
-
-
Save LukasRychtecky/1b9c6bc6ab2384283340de29fa21ae0c to your computer and use it in GitHub Desktop.
clj1.clj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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