服务合约 Service Contracts
Magento是一个模块化系统,使第三方开发者能够定制和覆盖其框架的核心部分。然而,这种灵活性是有代价的。业务逻辑往往会在Magento系统的各层之间泄漏,这表现为重复和不一致的代码。
商家可能不愿意升级Magento,因为他们购买的定制扩展可能与新版本的Magento不兼容。此外,Magento和第三方开发商可能会发现很难跟踪和报告定制扩展对其他扩展的依赖性。
为了解决这些问题,Magento系统引入了服务合约
什么是 service contract?
服务合约是为一个模块定义的一组PHP接口。服务合约包括数据接口和服务接口,前者保持数据的完整性,后者从服务请求者(如控制器、Web服务和其他模块)那里隐藏业务逻辑细节。
如果开发者根据一套设计模式来定义数据和服务接口,其结果就是一个定义明确、持久的API,其他模块和第三方扩展可以通过Magento模型和资源模型来实现。
Service contract 的优点
服务合约增强了Magento的模块化程度。它们使Magento和第三方开发者能够通过composer.json文件报告系统依赖性,从而保证Magento版本之间的兼容性。这种兼容性确保商家可以轻松升级Magento。这些合约确保了一个定义明确、持久的API,其他模块和第三方扩展可以实现。同时,这些合约也使配置服务为网络API变得容易。
数据实体是服务合约的一个附带好处。通常支持这些实体的数据库表可能很复杂。例如,一些属性可能被存储在EAV表中,所以一组MySQL数据库表可能会定义一个数据实体。服务合约中的数据实体比底层关系数据库模式中的数据模型揭示了一个更简单的数据模型。最终,你将能够为不同的数据集合使用不同的存储技术。例如,你可以使用一个NoSQL数据库来代替产品表。
Using the @api tag
可以通过使用@api来表示向后兼容。欲了解更多信息,请参见向后兼容开发 (Backward compatible development) 的内容。