我最近问了这个问题:Expose XML or Objects - 感谢大家的回复。
有一点要澄清。
- API 将始终被远程访问(即作为服务),最有可能通过 web 服务或 WCF。
我同意从理论上讲,将对象公开为输入/输出的强类型 API 是正确的方法。但是,我觉得公开 XML 仍有争议。在我看来,使用 XML 的原因是:
- 业务规则可以由 Schematron 中的业务分析师编写。
- 该接口是弱类型的,但只要调用它,就可以根据数据和业务规则验证数据。
- 服务的实现会更简单。不需要创建域对象模型。
- XML 模式已经定义(我们有一个模式的数据字典)。
使用 Web 服务技术意味着基于 XML 的 API 不需要在添加新的汽车“类型”时进行更改,例如
void AddNewCar( string newCarXml ) string[] GetCars( /* some query conditions */ )
如果我们使用基于对象的 API,那么添加新类型将需要一个新的查询方法来定义可以返回的可能派生类型(请参阅扩展 Web 服务)。像这样更新 Web 服务需要重新构建和重新部署此服务和所有现有客户端。
基于对象的 API 给我们带来了什么?一个强类型的声明式接口。它没有提供比 XML 更多的抽象(XML 本身就是一种抽象)。基于对象的 API 的成本是多少?它需要一整套需要业务规则和数据验证的域对象。
那么,我的问题是什么?给我一个不可战胜的、无可争辩的理由,为什么我应该选择对象。