sách gpt4 ai đã đi

ocaml, functor: tiêm phụ thuộc

In lại 作者:行者123 更新时间:2023-12-04 08:21:53 26 4
mua khóa gpt4 Nike

hiện hữu Real World Ocaml Chapter 9这是关于仿函数的:

Dependency injection

Makes the implementations of some components of a system swappable. This is particularly useful when you want to mock up parts of your system for testing and simulation purposes.



但我无法理解这个想法。
我还查看了有关 DI 的 Wikipedia - 但我实际上并没有捕获测试和模拟目的的关系。

1 Câu trả lời

Dependency injection是一种软件工程技术,其目的是减少程序的两个子系统之间的相互依赖关系。这项技术的一个非常重要的细节是,它涉及的不是两个,而是三个子系统:

  • 一项服务,
  • sử dụng
  • 的客户
  • 一个注入(inject)器,其职责是为客户准备服务。

  • 后一个子系统及其职责是一个经常被忽视但至关重要的细节:这意味着客户端对服务的了解与其公共(public)接口(interface)一样少,这意味着可以轻松使用模拟服务来测试客户端。

    假设我们编写了一个通过网络与键值存储进行通信的应用程序。键值存储具有以下签名:
    module type AbstractKeyValueStoreService =
    sig
    exception NetworkError
    type t
    val list : t -> string
    val find : t -> string -> string option
    val set : t -> string -> string -> unit
    kết thúc

    如果我们通过 AbstractKeyValueStoreService 类型的模块将客户端代码编写为客户端参数,我们可以通过提供一个模拟服务来测试我们的应用程序在使用 set 函数时对网络错误的弹性,而无需实际创建网络错误:
    module KeyValueStoreServiceFailingOnSet =
    cấu trúc
    exception NetworkError
    type t = unit
    let list () = [ "a"; "b"]
    let find = function
    | "a" -> Some("x")
    | "b" -> Some("y")
    | _ -> None
    let set _ _ = raise NetworkError
    kết thúc

    如果我们的客户端被编写为由 AbstractKeyValueStoreService 类型的模块参数化的仿函数,则很容易为此软件组件编写测试,其中模拟服务遵循与客户端或多或少复杂的交互脚本。

    使用模块作为参数可能不是一个“惊天动地的想法”,但重要的是要知道如何使用这个想法来解决重要的软件工程问题。这就是“真实世界 OCaml”的作者似乎在做的事情。

    关于dependency-injection - ocaml,仿函数 : dependency injection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35110857/

    26 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com