Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns GUI、BLL或DTO中的JSON/XML输出?_Design Patterns_Dto_Bll_Content Negotiation - Fatal编程技术网

Design patterns GUI、BLL或DTO中的JSON/XML输出?

Design patterns GUI、BLL或DTO中的JSON/XML输出?,design-patterns,dto,bll,content-negotiation,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

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

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

DTO的伪代码示例

class ExampleDTO{
    propertie name;
    propertie description;
}
BLL的伪代码示例

class ExampleBLL{
    GetExample(name) returns ExampleDTO;
    GetExamples() returns List<ExampleDTO>;
}
类示例{
GetExample(name)返回ExampleDTO;
GetExamples()返回列表;
}
1) 在带有BLL对象的GUI中:将来自BLL的DTO结果转换为JSON/XML
2) 在BLL中:类似于。。。getObjectJSON()->将DTO输入转换并返回为JSON格式
3) 在DTO中:行为像。。。toJSON()toXML()类似于toString()
4) 或者只包含1个属性(json/xml)的额外DTO
5) 还有别的吗


*就我个人而言,我认为(1)将逻辑排除在GUI之外的原因是错误的,(4)使用额外的DTO(如WebJSoneExampledTo和WebXmlExampleDTO)似乎有些过分,因为它们只有一个属性,我建议采用以下方法,假设您知道返回哪个响应

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

  • 您应该有一个层,它将接受两个参数,一个响应类型和第二个将被调用的函数

    • 该层将调用BLL
    • BLL将返回DTO
    • 现在,您应该将DTO转换为请求的类型,即JSON/XML
    • 将转换后的DTO返回到CALY
  • 最后,您将拥有3+层GUI、转换层和BLL。另外,BLL将与DAL进行交互

  • 不管响应类型如何编写代码都有好处,比如,您可以有任意数量的响应类型。就像你可以有XML,JSON和其他字符串或任何东西一样。你也会有更好的控制力

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

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

  • 您应该有一个层,它将接受两个参数,一个响应类型和第二个将被调用的函数

    • 该层将调用BLL
    • BLL将返回DTO
    • 现在,您应该将DTO转换为请求的类型,即JSON/XML
    • 将转换后的DTO返回到CALY
  • 最后,您将拥有3+层GUI、转换层和BLL。另外,BLL将与DAL进行交互

  • 不管响应类型如何编写代码都有好处,比如,您可以有任意数量的响应类型。就像你可以有XML,JSON和其他字符串或任何东西一样。你也会有更好的控制力

    如果我理解正确的话,您正在GUI和BLL之间添加转换器。是的,还有一种实用层。主要目标是使架构保持这样一种方式,即所有东西都可以插拔,而不是相互依赖。因此,如果我理解正确的话,您正在GUI和BLL之间添加转换器。是的,还有某种实用层。主要目标是使体系结构保持这样一种方式,即所有东西都可以插拔,而不是相互依赖。