通用代码生成与硬编码API调用:最佳方法

时间:2015-10-03 15:56:04

标签: java json xml web-services e-commerce

我陷入困境,想知道可以应用的最佳实践。我正在开发一个处理订单,发货,发票等的电子商务网站。

除了在我的应用程序中创建UI,我还能够从不同的供应商发送/接收数据(通过供应商apis xml / json)。该应用程序可以将订单/货件发布到我的应用程序中创建的供应商,或者从供应商处获取所有订单/货件以在我的应用程序中导入。该场景因供应商而异。

我的问题是处理这个问题的最佳方法是什么。以下是我想到的两种方法。我现在正在使用第一种方法,但我在考虑它是否适合在这种情况下使用。

1。)我创建了一个通用代码来生成基于XPATH的JSON / XML。例如,对于下面的XML生成,我使用XPATH作为Orders.order.orderNumber <Orders><order><orderNumber>testorder</orderNumber></order></Orders> XPATH存储在数据库中,并根据数据库中配置的不同XPATH,生成完整的JSON / XML并发送给供应商(GET / POST也在数据库中配置)。

我认为这种方法的优势在于将新供应商添加到系统中的工作量很小。 我认为它的缺点是XML / JSON生成通过大循环。由于要求供应商使用的API(订单GET等)大多是固定的,这似乎是一种不利因素。

2。)我创建了单独的服务来处理每个供应商调用,创建处理每个调用的方法,使用XML硬编码到应用程序中(无需通过XPATH在DB中进行配置)。 例如,2个供应商SuppA和SuppB。对于SuppA,将下载订单列表,并过帐SuppB货件。 因此,我的应用程序中将有2个服务处理每个供应商调用彼此独立,1个用于SuppA,另一个用于SuppB。 SuppA服务将调用订单GET api和SuppB服务将调用Shipments POST api。

我认为这样做的好处是它会很快,因为不需要XML / JSON生成,因为只有所需的调用将在每个供应商的服务代码中编码。 我认为它的缺点是只能调用固定服务。我可以通过DB改变第一种方法,但是需要更改此代码。

请就此提出建议。哪种方法最适合这种情况,通用数据库配置或硬编码的独立供应商服务?

2 个答案:

答案 0 :(得分:0)

首先为代码编写单元测试。这很可能会让您问自己是什么导致了更可测试和可维护的应用程序,以及以最优质的方式解决问题的原因。答案可能是#1和#2的组合。硬编码“魔术”值绝不是一个很好的选择。并且,在性能和/或可伸缩性方面,不得不调用繁重的持久层并不是很好。

我建议:

  1. 将值存储在易于维护的可配置位置。
  2. 使用像Redis或Memcache这样的缓存层,允许代码以可伸缩和可扩展的方式获取值。
  3. 优点:

    1. 防止硬编码。
    2. 防止在应用配置更改时进行硬重置/重启。
    3. 用于添加/删除新供应商的更具可扩展性的代码。
    4. 更好的整体应用灵活性。
    5. 最后注意:作为一种有趣的想法,您可以使用工厂模式动态生成供应商对象,以允许添加和删除正在运行的系统的供应商,而无需重新编码系统。这涉及更多,但可能是一个选择。

答案 1 :(得分:0)

我个人认为第二种方法更接近我选择的解决方案:你有许多外部接口,你必须与之沟通。根据您的描述,我理解,所有处理XML或JSON。考虑应该快速添加新供应商的情况,这成为一个关于可维护性的问题。

因此,我将为每个供应商定义一个具有匹配数据模型的接口。在您身边,您将拥有不同的数据模型来表示订单,货件,发票和诸如此类的东西。然后,您可以使用像Dozer这样的映射框架将数据从一个表示转换为另一个表示。

然后,您可以使用其他框架JAXBGSON将对象转换为XML或JSON。