是否存在JavaBeans或JAXB for PHP的世界类似物?是否可以从XML模式生成PHP类?
将API作为XSD架构发布是很常见的做法.Java和C#人可以通过直接从XSD生成类来获得优势.PHP有相同的工具吗?
例如,有以下调用的远程API:
getGroupCapacity(group)
setGroupCapacity(group, quantity)
getNumberOfItemsInGroup(group)
addItemToGroup(group, item)
deleteItemFromGroup(group, item)
Run Code Online (Sandbox Code Playgroud)
任务是向某个组添加一些项目.团体有能力.首先,我们应该检查组是否已满.如果是,请增加容量,然后添加项目.像这样的东西(例如API用SOAP公开):
function add_item($group, $item) {
$soap = new SoapClient(...);
$capacity = $soap->getGroupCapacity($group);
$itemsInGroup = $soap->getNumberOfItemsInGroup($group);
if ($itemsInGroup == $capacity) {
$soap->setGroupCapacity($group, $capacity + 1);
}
$soap->addItemToGroup($group, $item);
}
Run Code Online (Sandbox Code Playgroud)
现在如果addItemToGroup失败(项目不好)怎么办?我们需要回滚集团的能力.
现在想象一下,您必须添加10个项目进行分组,然后设置添加了一些属性的项目 - 所有这些都在一个事务中.这意味着如果它在中间某处失败,你必须将所有内容回滚到之前的状态.
没有一堆IF和意大利面条代码可能吗?任何将简化此类操作的库,框架,模式或体系结构决策(在PHP中)?
UPD: SOAP就是一个例子.解决方案应该适合任何服务,甚至是原始TCP.问题的关键是如何使用基础非事务API组织事务行为.
UPD2:我想这个问题在所有编程语言中都是一样的.所以任何答案都受到欢迎,不仅仅是PHP.
提前致谢!
考虑遵循nodejs中执行的javascript代码:
// create ClientRequest
// port 55555 is not opened
var req = require('http').request('http://localhost:55555', function() {
console.log('should be never reached');
});
function cb() {
throw new Error();
}
req.on('error', function(e) {
console.log(e);
cb();
});
// exceptions handler
process.on('uncaughtException', function() {
console.log('exception caught. doing some async clean-up before exit...');
setTimeout(function() {
console.log('exiting');
process.exit(1);
}, 2000);
});
// send request
req.end();
Run Code Online (Sandbox Code Playgroud)
预期产量:
{ Error: connect ECONNREFUSED 127.0.0.1:55555
at Object.exports._errnoException (util.js:1026:11)
at exports._exceptionWithHostPort (util.js:1049:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1081:14)
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED', …Run Code Online (Sandbox Code Playgroud)