GUI,BLL或DTO中的JSON / XML输出?

时间:2011-10-07 15:25:17

标签: design-patterns dto bll content-negotiation

我正在使用内容协商,因此根据请求的标头,我提供了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中:将来自BLL的DTO结果转换为JSON / XML
2)在BLL中:类似于...... getObjectJSON() - &gt;变换&amp;将DTO输入返回到JSON格式
3)在DTO中:行为如... toJSON()toXML(),如toString()
4)或额外的DTO只有1个属性(json / xml)
5)还有别的吗? ...

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

1 个答案:

答案 0 :(得分:1)

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

  1. 将响应类型与BLL分开,因为BLL不必对响应类型执行任何操作。

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

    • 此图层将调用BLL
    • BLL将返回DTO
    • 现在您应将DTO转换为请求的类型,即JSON / XML
    • 将转换后的DTO归还给cally。
  3. 最后,您将拥有3层以上的GUI,转换层和BLL。 BLL也将与DAL进行互动。
  4. 编写代码而不管响应类型将具有哪些优点,例如,您可以拥有任意数量的响应类型。就像你可以拥有XML,JSON和另一个将是字符串或任何东西。你也可以更好地控制。