dependency-injection – ocaml,Functors:依赖注入
|
在
Real World Ocaml Chapter 9这是关于仿函数:
但我没有理解这个想法. 解决方法
Dependency injection是一种软件工程技术,其目的是减少程序的两个子系统之间的相互依赖性.这项技术的一个非常重要的细节是它不涉及两个,而是三个子系统:
>一项服务, 后一个子系统,其责任,一个经常被忽视但至关重要的细节:这意味着客户端对服务的了解与公共接口一样少,这意味着可以轻松地使用模拟服务来测试客户端. 假设我们编写了一个通过网络与键值存储进行通信的应用程序.键值存储具有以下签名: module type AbstractKeyValueStoreService = sig exception NetworkError type t val list : t -> string val find : t -> string -> string option val set : t -> string -> string -> unit end 如果我们通过AbstractKeyValueStoreService类型的模块将客户端代码编写为客户端参数,我们可以通过提供模拟服务来测试我们的应用程序对网络错误的弹性,而无需实际创建网络错误: module KeyValueStoreServiceFailingOnSet =
struct
exception NetworkError
type t = unit
let list () = [ "a"; "b"]
let find = function
| "a" -> Some("x")
| "b" -> Some("y")
| _ -> None
let set _ _ = raise NetworkError
end
如果我们的客户端是由类型为AbstractKeyValueStoreService的模块进行参数化编写的,那么很容易为该软件组件编写测试,其中模拟服务遵循与客户端或多或少复杂的交互脚本. 使用模块作为参数可能不是一个“惊天动地的想法”,但重要的是要知道这个想法如何用于解决重要的软件工程问题.这就是“真实世界OCaml”的作者似乎所做的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
