Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Stripe在javaapi中使用Map_Java_Stripe Payments - Fatal编程技术网

为什么Stripe在javaapi中使用Map

为什么Stripe在javaapi中使用Map,java,stripe-payments,Java,Stripe Payments,在Stripe java api中使用HashMap的原因是什么 从stripe.com: Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"; Map<String, Object> ownerParams = new HashMap<String, Object>(); ownerParams.put("email", "payinguser+fill_now@example.com"); Map<Strin

在Stripe java api中使用HashMap的原因是什么

从stripe.com:

Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2";

Map<String, Object> ownerParams = new HashMap<String, Object>();
ownerParams.put("email", "payinguser+fill_now@example.com");

Map<String, Object> sourceParams = new HashMap<String, Object>();
sourceParams.put("type", "bitcoin");
sourceParams.put("amount", 1000);
sourceParams.put("currency", "usd");
sourceParams.put("owner", ownerParams);

Source source = Source.create(sourceParams);

Map<String, Object> chargeParams = new HashMap<String, Object>();
chargeParams.put("source", source.getId());
chargeParams.put("amount", source.getAmount());
chargeParams.put("currency", source.getCurrency());
Charge charge = Charge.create(chargeParams);
Stripe.apiKey=“sk_test_bkokikjovbii2hlwgh4olfq2”;
Map ownerParams=new HashMap();
ownerParams.put(“电子邮件”,“付款用户+填写”_now@example.com");
Map sourceParams=new HashMap();
sourceParams.put(“类型”、“比特币”);
sourceParams.put(“金额”,1000);
sourceParams.put(“货币”、“美元”);
sourceParams.put(“所有者”,ownerParams);
Source=Source.create(sourceParams);
Map chargeParams=new HashMap();
chargeParams.put(“source”,source.getId());
chargeParams.put(“amount”,source.getAmount());
chargeParams.put(“currency”,source.getCurrency());
Charge=Charge.create(chargeParams);
为什么不将简单java对象与getter和setter一起使用呢?
(我知道我可以用Java自己实现,因为它只是http请求)

我不知道确切的细节,但原因似乎很简单。他们希望避免设置&取而代之的是获取他们使用的每个属性,映射以获取相应设置的键和值。他们很可能正在处理JSON。即使是XML,使用映射也比通过普通对象处理要容易得多,因为每次都需要手动设置和获取所需的每个属性。相反,许多属性可以是可选的,所以只需设置通过map传递的值,因为在map上迭代比在对象上迭代更容易。

这是我反复看到的一种模式。我们可以:

  • 使用地图作为DTO
  • 使用MyClass扩展对象(POJO)作为DTO
  • 关于这个话题有很多线索

    然而,从Stripe中显示的并不完全是,它们只是使用
    Map
    作为填充请求属性的中介,然后将其转换为POJO

    因此,这更像是用作POJO构建器模式的地图。那么,备选方案将是:

    Source source = new Source.Builder()
        .withType(type)
        .withAmount(amount)
        .build();
    
    这是我更喜欢的,也是AWS(例如)的大多数工作方式

    但我认为,从JSON序列化程序的角度来看,转换一个映射,然后向POJO中添加一堆语法错误和框架y内容更为简单。所以,基本上——只是一个实施决策

    此外,如果与少量请求对象相比,您的API具有大量的请求属性,那么我认为它们开始更像字段字典,而不是结构化数据


    以免我们忘记,在经历了所有花哨的Java废话之后,这将是一个JSON中的字符串字典。所以说真的,#YOLO。

    当你看看Stripe API和他们所做的一切时,很明显,他们所做的事情并不只是为了以最简单的方式完成。他们努力使员工易于使用。这意味着他们认为从客户机的角度来看,使用getter和setter维护Map比维护Object更容易。我不明白为什么。我更喜欢建筑工而不是地图。您可以向方法、内部验证等添加java文档。Stripe生产高质量的软件,在他们的Java库中看到这张地图对我来说很奇怪。