【问题标题】:JSON/XML output in GUI, BLL or DTO?GUI、BLL 或 DTO 中的 JSON/XML 输出?
【发布时间】:2011-12-03 02:44:31
【问题描述】:

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

信息: 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) 拥有额外的 DTO (如 WebJsonExampleDTO 和只有一个属性的 WebXmlExampleDTO)似乎有点矫枉过正

【问题讨论】:

    标签: design-patterns dto bll content-negotiation


    【解决方案1】:

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

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

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

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

    不管响应类型如何编写代码都会有一些好处,例如,您可以有任意数量的响应类型。就像你可以有 XML、JSON 和另一个是字符串或任何东西。你也将有更好的控制。

    【讨论】:

    • 所以如果我理解正确的话,你是在 GUI 和 BLL 之间添加 Transformer。
    • 是的,还有一种实用层。主要目标是使架构保持这样一种方式,即一切都可以插入并且不相互依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2021-03-08
    • 2011-09-08
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多