首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure样式/成语:创建映射并将它们添加到其他映射中

Clojure样式/成语:创建映射并将它们添加到其他映射中
EN

Stack Overflow用户
提问于 2014-09-16 18:29:20
回答 1查看 174关注 0票数 0

我正在编写一个Clojure程序,以帮助我执行安全风险评估(最终得到了Excel的补充)。

我有一个关于Clojure成语和风格的问题。

为了在风险评估中创建关于资产的新记录,我在当前正在使用的风险评估(地图)中传递了有关资产的新记录,以及关于该资产的一组信息,我的make-asset函数创建了该资产,并将其添加到R-A并返回新的R-A。

代码语言:javascript
复制
(defn make-asset
  "Makes a new asset, adds it to the given risk assessment
  and returns the new risk assessment."
  [risk-assessment name description owner categories
   & {:keys [author notes confidentiality integrity availability]
      :or   {author "" notes "" confidentiality 3 integrity 3 availability 3}}]
  (let [ia-ref (inc (risk-assessment :current-ia-ref))]
    (assoc risk-assessment
      :current-ia-ref ia-ref
      :assets (conj (risk-assessment :assets)
                    {:ia-ref ia-ref
                     :name name
                     :desc description
                     :owner owner
                     :categories categories
                     :author author
                     :notes notes
                     :confidentiality confidentiality
                     :integrity integrity
                     :availability availability
                     :vulns []}))))

这看起来是一种明智的做法吗?

我能让它变得更地道,更短,更简单吗?

我想的特别事情是:

  • 是否应将资产添加到风险评估中?(一项资产在风险评估之外毫无意义)。
  • 是否有更简单的方法来创造资产;以及
  • 把它加到风险评估中?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-09-17 16:25:03

Clojure (和任何其他Lisp方言)的一个核心原则是创建小的可组合函数。

如果一个资产是在风险评估之外创建的,只要该资产在添加到风险评估之前没有暴露于期望完全形成的资产的代码中,这就不是一个问题。

因此,我建议如下(未经测试):

代码语言:javascript
复制
(defn add-asset-ra
  [{:keys [current-ia-ref] :as risk-assessment} asset]
  (let [ia-ref (if current-ia-ref
                 (inc current-ia-ref)
                 1)] 
    (->  risk-assessment
         (assoc :current-ia-ref ia-ref)
         (update-in [:assets] #(conj % (assoc asset :ia-ref ia-ref))))))

(defn make-asset
  [name description owner categories
   & {:keys [author notes confidentiality integrity availability]
      :or   {author "" notes "" confidentiality 3 integrity 3 availability 3}}]
  {:name name
   :desc description
   :owner owner
   :categories categories
   :author author
   :notes notes
   :confidentiality confidentiality
   :integrity integrity
   :availability availability
   :vulns []})

您还可能发现模式库对于验证函数参数的形状很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25875987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档