1

我正在使用内容协商,因此根据请求的标头,我提供 JSON/XML 输出。现在我想知道提供此功能的最佳位置是什么。

Info: BLL= 业务逻辑层
DTO= 数据传输对象
DAL= 数据访问层

DTO 的伪代码示例

class ExampleDTO{
    propertie name;
    propertie description;
}

BLL 的伪代码示例

class ExampleBLL{
    GetExample(name) returns ExampleDTO;
    GetExamples() returns List<ExampleDTO>;
}

1) 在带有 BLL 对象的 GUI 中:将 DTO 结果从 BLL 转换为 JSON/XML
2) 在 BLL 中:类似于... getObjectJSON() -> 将 DTO 输入转换并返回为 JSON 格式
3)在 DTO 中:行为类似于... toJSON() toXML() 类似于 toString()
4) 或只有 1 个属性的额外 DTO (json/xml)
5) 其他?...

*我个人认为 (1) 将逻辑排除在 GUI 之外的原因是错误的,(4) 拥有像 WebJsonExampleDTO 和只有一个属性的 WebXmlExampleDTO 这样的额外 DTO 似乎有点矫枉过正

4

1 回答 1

1

我建议采用以下方法,假设您知道要返回哪个响应。

  1. 将响应类型与 BLL 分开,因为 BLL 不必对响应类型做任何事情。

  2. 您应该有一层将接受两个参数,一个响应类型,第二个将是要调用的函数。

    • 该层将调用 BLL
    • BLL 将返回 DTO
    • 现在您应该将 DTO 转换为请求的类型,即 JSON/XML
    • 将转换后的 DTO 返回给 cally。
  3. 最后,您将拥有 3 层以上的 GUI、转换层和 BLL。BLL 也将与 DAL 交互。

编写代码而不考虑响应类型将具有以下优势,例如,您可以拥有任意数量的响应类型。就像你可以有 XML、JSON 和另一个是字符串或任何东西。你也将有更好的控制。

于 2011-10-15T11:52:11.917 回答