设计通用但灵活的内部服务响应对象

时间:2014-05-27 21:18:33

标签: scala traits

我想创建一个既普通又灵活的自定义响应对象。

我根据亚马逊的API响应代码对此进行了模拟。

示例用法如下:

val response: AddProductResponse = shoppingcartService.addProduct(product)

我想的是:

  1. 成功/失败
  2. 错误消息收集
  3. 错误代码
  4. 自定义有效负载,可以是对象,列表,地图
  5. 错误代码应该支持模式匹配,我相信我可以使用特征正确吗?

    寻求有关如何使用scala“最佳实践”进行设计的一些帮助。

    这就是我的想法(伪代码),但请根据您的想法提供您的反馈,而不是基于我的想法。

    trait BaseResponse {
      def success: Boolean
      def errorCode: ErrorCode
      def errorMessages: List[String]
    }
    
    sealed abstract trait ErrorCode
    case class OutOfStock() extends ErrorCode
    case class ExceededMaxQuantity() extends ErrorCode
    
    trait OutOfStock extends ErrorCode
    
    case class AddProductResponse(products: Option[List[Product]]) extends BaseResponse
    

    因此,上面的AddProductResponse是通用的,它会响应成功/失败,并返回错误代码和错误消息列表。 它的具体部分是,如果响应成功,它会返回产品列表(所以我将它包装在一个选项中)。

    我从未在scala中设计过任何类/特质层次,所以我可以找到所有反馈。

0 个答案:

没有答案