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

Posted

技术标签:

【中文标题】GUI、BLL 或 DTO 中的 JSON/XML 输出?【英文标题】:JSON/XML output in GUI, BLL or DTO? 【发布时间】: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)似乎有点矫枉过正

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

所以如果我理解正确的话,你是在 GUI 和 BLL 之间添加 Transformer。 是的,还有一种实用层。主要目标是使架构保持这样一种方式,即一切都可以插入并且不相互依赖。

以上是关于GUI、BLL 或 DTO 中的 JSON/XML 输出?的主要内容,如果未能解决你的问题,请参考以下文章

我应该将实体(持久)对象转换为 DTO 对象吗?

DTO

DTO 类与结构

从 DAL 返回 DTO 与 DataTable

如何在 3 层(单层)应用程序中在 BLL 和 UI 之间传递数据?

怎样在MATLAB GUI界面中调用另外一个GUI界面