最近,我问这个问题: 让XML或者对象 -谢谢所有的答复。

一点澄清。

  • API总是将远程访问(即作为一个服务),最有可能通过web服务或WCF。

我同意,在理论上强类型API暴露对象的投入/产出是的 路要走。然而,我觉得,还有一个说法是由于暴露XML。因为我看到它的原因,采用XML是:

  1. 业务规则可以写业务分析师在在.
  2. 该接口是弱类型,但一旦它被称为数据可以验证的数据和业务的规则。
  3. 服务的实施将能简单。将不会有任何需要创建一个领域对象的模式。
  4. XML模式已经定义(我们有一个数据字典的模式)。
  5. 使用网络服务技术意味着一个基于XML API将不需要改变为新车"类型"的增加,例如

    void AddNewCar( string newCarXml )    
    string[] GetCars( /* some query conditions */ )
    

    如果我们采用了一种基于对象API后,添加一个新类型将需要一个新的查询方法界定的可能衍生出类型,可以返回(见 延伸网服务).更新网服务,这样将需要这种服务和 所有 现有的客户进行重建和重新部署。

什么是对象基于API给我们吗?强类型声明的接口。它没有提供任何更多的抽象比XML(XML本身就是一个抽象的概念).什么是对象基于API成本?它的成本的一整套域的对象,这将需要业务规则和数据验证。

那么,什么是我的问题吗?给我一个联合国defeatble,享有无可争辩的理由为什么我应该去的对象。

有帮助吗?

解决方案

  • 对象可以更好地执行(思想二进制序列化)。
  • 对象可以有更强的简单类型的验证。
  • 对象允许你把验证和业务规则更接近于数据结构定义。
  • 对象通过自己的自然能让你写更简单的业务规则和验证,因为那是嵌在对象的定义本身。
  • 对象还可以定义的行为。
  • .净变得非常简单的把对象为Xml,然后再返回经由化,给予的对象大多数的相同的益处xml。

其他提示

如果你是在寻找一个参数赞成票的XML(不,我特别赞成XML):

  • 暴露在XML和提供一个文件是自我解释,当它涉及到数据。你可以通过关闭所有的数据,在这种形式,这是自的记录和可验证的合理简单。

  • 我可以写一堆的安全代码对我的数据库或编码模型和我可以释放的数据在一个自给自足和安全的方式向其他业务单位,需要最小的进一步的文件或说明。

  • 它是如此的容易阅读,通常,你可以读它,因为很容易因为你可以读取文件或代码注释。

的参数反对它然而,去和...姓名的最严重的罪犯:

  • 过于详细。
  • 巨大的网络的开销。
  • 需要了解的一个额外的技术,也许不必要的(?).
  • 更复杂的,你做什么,更多的机会用于错误的。

强打字事实上,任何输入在所有对于这个问题存在的唯一原因,程序不会使任何愚蠢的错误(eg.通过一个字符串功能期待一个int等)。在这种情况发生在汇编时间和费用没有在运行从而产生有效的代码通过避免运行的检查(例如。对于适当的转换),并避免异常行为在运行,用于不受管理的代码。

就像你说的Xml可以用于定义的一个象替换模式,但这个目的模型需要经过同一检查在运行时,以保证可靠性的某种程度上。但是,这具有一定的有限运行开销。

有的说是所有我想说的是最终的选择是你的。你是否愿意放弃在安全(以及有时安心)提供一个"硬性"对象模型或者你会更舒适用一个更灵活的但是可以拍自己的脚对象的模式?XML需要更大的程序员的纪律和警觉性(因而使这一苦差事使用恕我直言).

"目的基础"API是不是刚性的,因为你认为,自动产生的XML模式可能不能这样做你到底想要什么他们这样做。基于对象Api可以由只作为灵活,因为基于XML API如果他们已经设计好。动态的打字可以帮助太的时候。

当你让普通XML,所有你的客户将需要编写代码生成和分析,XML。容易在一些语言中,一个塔中的其他人。

但是,大多数语文网页服务Api,可以采取的wsdl/文件,并产生一个完整的图书馆客户在几秒钟内。当然,他们将必须编写一映射工具的地图,从其内部模型模型与你互动,但这是可预期的。

你的网服务将处理所有对象<-->XML的东西内部(对客户的看法),你不需要担心的肥皂和所有。你定义的界面:

void addCar(Car newCar);
Car getCar(String make, String model, String year);
void removeCar(...);
List<Car> getAllCars();

这使得很多的感到你的客户。他们抓住你的户生成自己的客户的图书馆Java,C#PHP,蟒蛇,等等。

有什么能阻止你添加:

int addCarXML(String carXML);
String getCarXML(int carID);

但是为什么加两个级别的服务令人讨厌的一wsdl,然后xsd的XML模式...

看一看该网站上的文章有关合同一设计,春天网网站有一个很好的例子。我正在开发一个新网站,现在,已经采取的办法的开始和XML模式和利用它来设计我应用领域模型。XML是一个优秀的送数据之间不同系统或甚至层的应用。它编程语言无关,并有许多工具,用于编辑、设计和实施XML基础的设计。

这是冗长的,但在计划的事情的详细程度是一个小小的心烦。它可以创建大型文件,只要压缩。有更多的开销在处理它,但我们开发人员总是交易纯粹的性能为便于使用、可维护性、可扩展性,等等。

这里是另一个随机的思想使用既不;-p我想其他的交换格式。我已经做了很多工作,最近与缓冲区协议-这提供了合同,第一次使用(通过"。原"定义),但是设计与安全的可扩展性中心-即你可以设计的东西通过的意想不到的数据,而不破坏或损失。不幸的是,主要协议的缓冲区规范实际上并没有包括继承权,但我的执行情况(格式-net)填充这种通过扩展。

它是否足够成熟,取决于方案-我只是认为这可能会感兴趣。此外,它(格式-net),也可插入WCF为方便预卷RPC栈;-p

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top