Adapter模式实践——将接口转换为客户端期望格式
介绍
Adapter模式是一种结构性设计模式,其核心在于将一个类的接口转换为客户端需要的另一种接口形式。在代码重构或者两个不兼容的类需要协同工作的情况下,这种模式会变得很有用。本文将详细介绍适配器模式在实践中的应用。
场景
情景如下:
你是一个拥有几个RESTful API的开发人员,你还有一个App需要访问这些API;你需要使用一种有用的方式将API的输出转换为App所需的格式。在这种情况下,适配器模式可以让你执行这种科学事实,同时还可以保持代码的清晰度。
实践
这个例子中,我们将使用node.js和Express框架,展示如何设计一个RESTful API从XML数据集合到JSON。
坑点:
首先,我们必须有两个控制器:一个为我们的XML,另一个为JSON。我们需要重构xmlToJSON.js并创建jsonCtr.js。
开始实践,实现代码如下:
```xmlCtrl.js```
```js
const xmlToJSON = require('xmlToJSON');
module.exports = (()=>{
'use strict';
const xmlCtrl = require('express').Router();
xmlCtrl.get('/', (req, res)=> {
let xml = '<?xml version=\"1.0\"?>';
xml += '
- Salad5.00Good
- Steak15.00Great
';
xmlToJSON(xml, function(err, json){
if(err) {
res.status(422).json({message: 'Error processing XML'});
return;
}
res.status(200).json(json);
});
});
return xmlCtrl;
})();
```
尽管我们可以看到我们只是返回纯xml。 但是,查看xmlToJSON.js文件的来源于是Node.js中的xml2js模块。
```js
const xml2js = require('xml2js');
module.exports.convert = (xml, done )=>{
xml2js.parseString(xml, (err, json) => {
if(err){
done(err);
} else {
done(null, json);
}
});
};
```
适配器的重要部分——jsonCtrl.js,如下所示。
```js
const xmlCtrl = require('xmlCtrl');
const xmlToJSON = require('xmlToJSON');
module.exports = (()=>{
'use strict';
const jsonCtrl = require('express').Router();
const transformResponse = (type) => (req, res, next)=> {
const oldJson = res.json;
res.json = (data) =>{
switch(type){
case 'json': return oldJson(data);
break;
case 'xml2json':
xmlToJSON.convert(data, (err, xmlData)=>{
if (err) return next(err);
res.json(xmlData);
});
break;
default:
res.json(data);
}
};
next();
};
jsonCtrl.use(transformResponse('json'));
jsonCtrl.get('/', (req, res)=> {
let xml = '<?xml version=\"1.0\"?>';
xml += '
- Salad5.00Good
- Steak15.00Great
';
res.json(xml);
});
return jsonCtrl;
})();
```
让我们来分解一下jsonCtrl.js的代码段。 首先,我们导入xmlCtrl和xmlToJSON。 接下来,我们定义了一个中间件函数transformResponse,该函数将传入的字符串类型与当前响应相比较,并将其转换为期望的输出类型。转换使用了XML到JSON的转换。
这个函数的主要目的是改变响应中的默认JSON解析行为,使用res.json();更改为res.json(type);。在type变量中,传递我们期望的响应格式。
接下来,我们附加此中间件来自动处理响应转换,然后与默认的JSON响应一样,将一些例子XML作为响应返回。
到此,我们就完成了一个基本的实用适配器模式,从XML到JSON.
总结
在这篇文章中,我们讲述了适配器模式以及怎样把理论应用到实践场景中,从XML到JSON的转化。适配器模式在处理不兼容接口的代码库方面极其有用,可以轻松重构和解耦代码。我们是如何将一个xmlToJSON的库转换为自己期望格式处理的示例。最后,希望读者们也能够从实例中掌握这种模式,实现工业标准编码的做法。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至:3237157959@qq.com 举报,一经查实,本站将立刻删除。