Grails框架优劣势分析及同类比较

28、Grails 升级指南与版本特性全解析 本文详细解析了 Grails 从 1.2 到 2.0 的多个版本升级前需要检查的问题,并全面梳理了各版本的重要特性与变更。内容涵盖依赖管理、GORM 改进、插件部署、多数据源支持、代码热加载、单元测试优化等关键功能,同时列出了破坏性变更以帮助开发者顺利升级。通过本文,读者可以全面了解 Grails 各版本的核心改进与升级注意事项,提高应用开发与维护效率。 阅读详情

Grails的优势

DRY(Don't Repeat Yourself,不要重复自己),约定优于配置(Convention over Configuration)

DRY和约定优先于配置的思想,是由Rails兴起并迅速被广泛接收和欣赏的Web框架新思路。Grails作为JEE世界的Rails,把这些最前沿的设计理念带入已显得陈旧的JEE社区,拥有鲜明突出的特点,以及由此带来的优秀的开发效率。

DRY 的思想是避免重复的信息。Grails中的DRY主要提现在URL映射定义上(URLMappings.groovy)。在 URLMappings.groovy中定义了应用的各个URL以后,通过使用Grails预定义的动态Controller方法和GSP标签,开发者就 不必再把程序URL硬编码在各处。比如使用GSP标签, 和,只需要提供Controller,Action和可选的参数,就能产生所需的URL。具体的用法可以查阅Grails文档 。

在约定优于配置方面,Grails和Rails非常相似。所谓约定优于配置,就是按照框架约定的方式来组织资源,就可以免去任何额外的配置。比如 Grails的自定义标签,存放在应用目录下的grails-app/taglib路径下,并以XXXTagLib.groovy的方式命名,就能无需任 何配置就可以在GSP里使用这些标签库了。另外还有Service类,Job类,包括整个Grails应用的目录结构,都是约定由于配置原则的体现。在这 些方面JEE开发者一定会为摆脱各种繁琐的配置感到异常兴奋,并且实实在在的节约很多开发时间。

JVM


Groovy语言
通过运行在JVM之上,Grails拥有一个经过多年开发,已经非常成熟,业界标准级别的运行环境。JVM的稳定性和最新版本的性能都已经相当成熟。相比 最直接的比较对象Rails,Grails在运行环境性能上的优势是比较明显的。另外,已有的Java可重用组件基本都可以直接使用于Grails,无疑 也是Grails的一个明显优势。

Grails和Groovy语言的关系是密不可分的。对于Groovy来说,Grails是其最大的杀手级应用。而对Grails来说,Groovy是其能够实现灵活多变的快速开发,区别于其他运行于JVM之上的Web框架的核心技术。

Groovy的动态特性是其最大亮点,在这方面几乎不输于Ruby等其他热门的动态语言。meta-programming,closure等等热门的动 态语言特性在Groovy中都有很好的实现。而且,Groovy程序能够编译为JVM字节码的.class文件,直接运行在JVM上,Groovy程序的 性能能够得到一定的帮助。Groovy能够和Java混合编写,混合编译,使得Java程序员能不用浪费自己在Java语言上的大量投入,更轻松快捷地进 入Groovy的世界。使用Groovy编程,相比使用Java来说快速轻松得多,对为数众多的Java程序员颇有吸引力。

插件系统

Grails的插件系统也是其亮点之一。首先,和Rails,Django等Web框架类似,基于微内核的思想,插件(可重用模块)是框架的一等公民。 Grails除了核心模块以外的功能几乎都是通过插件方式实现的。实际上,一个Grails插件和一个Grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个FooPlugin.groovy文件,提供插件的一些描述信息。

Grails插件基本可以做任何事情,Grails社区已经提供了各式各样的插件,发布在Grails官方插件源上。查看现有的官方插件,可以执行下面的命令。

grails list-plugins

在官方源里看到了需要的插件名称(例如foo-plugin),安装插件也只需要一条命令即可。

grails install-plugin foo-plugin

Grails就会下载相应的插件包并解压到本地Grails应用的插件路径下,并自动执行插件自带的安装脚本。

创建自己的插件也同样轻松。首先通过下面的命令自动建立插件项目

grails create-plugin foo

Grails就会自动建立一个插件项目,包括一个FooPlugin.groovy的模板文件。编写Grails插件的具体方法可以阅读Grails插件开发文档。编写好了插件以后,准备发布到官方插件源上的话,首先注册一个codehaus帐号,成为Grails Plugins项目成员,并在官方邮件列表上申请发布权限。然后,只需要一条命令就可以自动发布到官方SVN源,提供给所有人下载了。

grails release-plugin

充分利用好已有的插件,可以进一步加快Grails开发过程。比如我在开发feedlr过程中就使用了Quartz,Searchable,Feeds,OpenID等插件,而且编写并发布了OAuth插件。

GSP和标签库

Grails前端开发使用的是GSP(Grails Server Pages),开发者可以使用Grails特定的模板语法编写gsp动态页面,并且可以直接使用Groovy脚本或是各种预定义和自定义的标签库 (taglib)。这么看起来和JSP区别不大,而实际上,Grails带给开发者的是远比名字上的区别大得多的开发效率上的进步。

首先,虽然不是推荐的做法,但是直接在GSP中使用Groovy脚本的话就直接利用了Groovy快速开发的优势。

另外,JEE开发者对于JSP标签库的易用性大多有所诟病,常常需要做貌似多余的各种配置。而Grails通过DRY和约定优先于配置的思想,使得GSP 标签库的易用性非常棒。框架预定义的标签库自然是什么配置都不需要就可以直接使用了,而利用了Groovy的动态特性的标签语法,可以相当程度地减少编码 量。

编写自定义标签相对于JSP更是异常轻松。只需要通过以下命令新建自定义标签库文件,通过groovy的closure方式编写自定义标签,之后什么配置都不需要,就可以直接在GSP中使用新建的自定义标签了。

grails create-tag-lib

自定义标签库文件存放于应用根路径下的grails-app/taglib目录下,命名规范为XXXTagLib.groovy,通过Grails框架的约定规则就能自动装入了。

成熟的JEE Stack

Grails是一个整合了若干已有JEE组件和框架而成的,其中包括了Spring,Spring Workflow,Hibernate,SiteMesh,JUnit,Ant等。这些都是已经相当成熟的开源组件,是开源JEE Stack的事实规范。通过以这些组件为基础,Grails直接就能在企业应用市场占有一定地位。而社区更是为Grails贡献了不少其他JEE开源组件 的插件。对于企业来讲,Grails直接就是一个很有吸引力的快速原型开发框架,可以直接和广泛使用的已有技术很好的整合。这点可能是Grails和 Rails等类似框架相比,对手短期内无法达到的优势。

没有银弹

软件开发过程没有银弹,Grails也不是圣杯。虽然Grails拥有众多鲜明特点和优势,但目前来看也有不少缺点。

JVM的部署环境

JVM作为Grails的运行环境,是一把双刃剑。在性能出色的同时,JVM对于环境的要求使得Grails应用的部署环境比较有限。由于JVM的特殊 性,时至今日,性价比高的Java服务器依然屈指可数。相对于PHP,Python,甚至Ruby的眼花缭乱的廉价服务器选择,Grails开发者只能眼 红了。这样带来的问题是使用Grails技术的话部署应用的起步成本高,对独立开发者以及对成本敏感的小型创业公司来讲,起步阶段就大多会采用性价比更高 的其他技术。

复合型框架带来的整合复杂性

Grails使用多种已有的成熟开源JEE组件,同样是一把双刃剑。多种组件整合在一起,出现整合方面的问题的话调试修改都会比较吃力。典型的例子是 Grails出错的stack trace,往往会包括了从下层JEE框架抛出的大量异常信息,这些噪音对分析问题造成干扰,对一些疑难问题的解决会造成困难。而且这些底层组件都是传统 的JEE组件,调试起来丝毫无法利用到Groovy和Grails的灵活方便的优点。

开发工具的欠缺

Grails开发使用什么IDE,这是大多开发者接触Grails时最先提出的问题。可惜的是,这个问题至今没有令人信服的答案。在官方邮件列表上,推荐 比较多的是IntelliJ IDEA,其他可选的是Eclipse,Netbeans。IDEA相对来讲对于Groovy/Grails的支持确实做得最全面,但是对于习惯于开源 IDE的大多数JEE开发者来说,切换到另一个陌生的而且购买费用不低的IDE是个不小的代价,而对于企业来讲为此花钱更换开发环境更是个不小的障碍。 Eclipse和Netbeans的Groovy/Grails支持至今还是比较初步和不稳定,而且进展也相当缓慢。目前我个人更倾向于使用Mac TextMate加上Groovy Grails Bundle。但这并不是一个适合所有人的答案。

尚不成熟的社区

这可能是Grails最关键的隐藏的弱点。一个开源项目的成功与否很大程度上取决于其社区。Rails/Ruby,Django/Python,包括 PHP都属于现今最好的开源社区,活跃的社区对开源项目的成长起到巨大的作用。但是Grails的社区至今还是相当小众,在人数和质量上都无法和以上三大 社区相比。一个不成熟的社区带来的一个明显问题就是Grails项目的开发进度比较慢,相关文档和资料缺乏>

敏捷开发框架横向比较:Grails,Rails,Django

性能

和使用Ruby语言的Rails以及使用Python语言的Django相比,使用Groovy语言的Grails可以利用到其整合的JEE组件和JVM本身的性能优势。而在性能是关键的时候,还可以直接使用Java。

Grails项目负责人Graeme Rocher做过一个比较细致的Grails和Rails性能对比评测。 在Grails 0.5和Rails 1.2.3的对比测试中,在包括数据CRUD操作在内的所有项目中Grails全面超越Rails,某些项目的优势可以达到40%-50%。不过这个测试 是在07年初做的,目前已经比较过时,两个项目也已经经历了不少更新。但是基本上说,借助了JVM性能优势的Grails相比100%纯Ruby的 Rails还是在微观性能测试中占有一定上风。

由于Ruby默认运行时VM的性能一般,Django采用的Python语言在微性能测试中也要胜于Ruby,但是Grails和Django的直接对比目前似乎还没有详细可靠的资料。

开发效率

这三种框架在设计理念上基本是一致的:DRY(Don't Repeat Yourself,不要重复自己)和约定优于配置(Convention over Configuration),所以在开发效率上三者基本不相上下。

另外值得一提的是,Groovy语言本身的特点也使其开发效率比Java高出不少,和其他流行动态语言不相上下,对Grails的开发效率功不可没。Grails框架内提供的魔法般的动态方法都是通过Groovy元编程实现的,包括约定优于配置 中Service类的自动注入,builder,codecs等的实现等等。由于篇幅有限此处无法做进一步举例,大家可以从Groovy主页得到详细的资料。

部署

应用的部署可能是这三种框架区别最大的一点。

对于Grails,基本可以部署在任何Java Servlet容器环境下。而在实际情况中,廉价的Java服务器选择很少,一般只能采用VPS或者独立主机的方式部署。而JVM对内存的要求也不低。虽 然有不少在256MB内存的环境下运行Grails的例子,但是要达到实用的性能的话,至少512MB的内存是必须的。比如Feedlr是部署在一台 540MB内存的VPS服务器上(由Linode提供)。

Rails由于其快速窜红,目前可选的部署服务已经不少了。除了VPS和独立主机外,直接支持Rails的廉价共享主机,甚至Rails云计算服务(Heroku)都是不错的选择。

和Rails一样,Django的部署服务选择也不少。从廉价的共享主机到云计算服务,特别值得一提的是支持Django的Google App Engine服务,是一个很有吸引力的选择。

社区

在本系列上文中提到了Grails在开源社区方面的劣势。Grails目前还是一个很年轻的项目,而Groovy也还是一个年轻而小众的语言。在社区方面,Grails的劣势是比较明显的。

Rails 社区是三者中最热闹的。在偶像级人物DHH的带领下,Rails的发展确实让人刮目相看。Django的社区依托了历史悠久而成熟的Python社区,也 发展的相当成熟。成熟的开源社区的一大标志就是有众多高质量的社区代码,包括社区开发的组件和贡献的代码。在这方面Rails和Django都非常典型, 两者目前都已经依托社区建立其了一定规模的核心开发团队。而Grails目前还是主要由G2One团队进行开发,从项目进度来看资源比较紧缺,新版本发布 常被推迟。我在开发Feedlr过程中曾为Grails提交过几个补丁和发布了OAuth插件,在此过程中也感觉Grails还需要更多来自社区的帮助。 在此也希望各位爱好Grails的朋友能多多为Grails贡献代码,一起把社区建设的更好。

Grails的现状和未来

Grails目前主要被少数独立开发者和小型网站采用,另外在使用JEE的大型公司中也有不少使用Grails进行快速原型开发和试验性项目,包括Oracle,SAP等都有使用Grails的例子。

Oracle

Oracle早在JavaOne 06就宣布支持Grails/Groovy,Oracle官方也给出不少通过Grails使用旗下产品的文档:http://www.google.com/search?q=grails%20oracle。

SAP

SAP提供了Composition on Grails产品,支持使用Grails和Groovy进行SAP产品的开发。

LinkedIn

热门的商务SNS网站LinkedIn有使用Grails进行开发的例子,曾经发布过招聘Grails工程师的广告。LinkedIn官方博客还曾专门介绍过使用Grails进行内部开发的经验。

更多Grails网站的例子

Grails官方Wiki提供了更多使用Grails搭建的网站的例子:http://grails.org/Success+Stories

总的来说,由于Grails基于JEE的架构,企业市场接受Grails的速度比Rails更胜一筹。但目前Grails还没有较大规模和影响的实际案例,企业采用Grails也尚处于尝试阶段。而Grails部署服务的选择还是不多,但是值得一提的是最近出现的Morph Labs提供的云计算服务,直接支持Grails的部署。相信如果配套的部署服务跟上的话,Grails会得到更多开发者的青睐,并且涌现更多有意思的实际网站案例的。

Groovy和Grails诞生以来一直作为独立的开源社区项目存在,并没有商业支持。在07年9月,Grails和Groovy各自的项目负责人合作成立了G2One公司,专为Grails和Groovy技术提供背后的支持并进行商业化运作。而在08年11月,SpringSource宣布收购G2One。这样,以Spring为基础的Grails正式进入了Spring家族,结束了漂流生涯。这对于Grails以及Groovy社区都是一个非常好的消 息。独立开源项目往往受到资金,人力等问题的困扰,而有了商业公司的支持,项目可以拥有全职开发人员,可以有市场推广的预算,并且通过Spring的品牌 和市场占有率,更能提高Grails和Groovy的知名度和业界影响。在09年,随着收购过渡的完成,我们期待Spring给Grails带来的改变, 而带给开发者一个更出色更成熟的开发工具。

总结

Grails是个特色鲜明的Web开发框架。作为一个年轻的开源框架,它有吸引人的特点,但还并不完美。

参考资料

全面掌握Groovy&Grails:书籍与技术要点 Groovy是建立在Java平台之上的动态语言,它扩展了Java语言,同时提供了一种更加简洁、灵活的编程方式。在本章节中,我们将探索Groovy的基本概念、起源及其在现代IT行业中的地位。Groovy Shell提供了一个交互式的编程环境,允许开发者直接在控制台中编写和测试Groovy代码。它类似于Groovy的REPL(Read-Eval-Print Loop),能够即时执行语句并输出结果,这使得它成为快速测试代码片段或学习Groovy语言的理想工具。 阅读详情

相关推荐

grails框架心得

用grails开发过程中,项目优化配置,系统间调用等的总结。

Grails框架7.0版本升级指南与技术要点解析

Grails作为一款高效的Groovy全栈Web开发框架,其7.0版本带来了多项重大改进和优化。本文将深入剖析从旧版本升级到Grails 7.0时需要注意的关键技术点,帮助开发者顺利完成迁移工作。 ## 构建系统优化 ### 1. Gradle插件简化 在Grails 7.0中,构建配置得到了显著简化: - `org.apache.grails.gradle.grails-plugin`插

gitblog_00575的博客 424

Java程序员使用Grails的十大优势

 Web开发方面没有王者,PHP市场很大,但RoR,Python,Java,及至Asp.net都占据着一方市场.那么作为Java程序员,当你不想使用SSH做网站的时候,尝试一下Grails吧,这里是Java程序员使用Grails的十大优势

探索Grails:高效全栈开发的新选择

探索Grails:高效全栈开发的新选择 去发现同类优质开源项目:https://gitcode.com/ 是一个基于Groovy语言的开源Web应用框架,它以简化和加速Java平台上的全栈开发为目标。如果你正在寻找一种能够提高生产力、具有强大社区支持且灵活的框架,那么Grails可能是你的理想选择。 项目简介 Grails的设计理念是“Convention over Configuration”(...

gitblog_00010的博客 440

KEGG两类报错--①No gene can be mapped--②URL ‘https://rest.kegg.jp/link/hsa/pathway‘…

版本问题,重新安装一下clusterProfiler包。网络问题,可以等待之后再试一下(试过不是)(以上可以排除基因不存在的错误因素)

weixin_57699783的博客 2万+

一文帮你彻底搞懂ARM Debug Interface之SWD(转)

ARM的文档写的已经很好了,但是关于上电以后的第一时间应该怎么操作,依然写的不够清晰,导致我第一次用的时候还是费了一些周折。今天做一个详细的梳理,希望能够帮助到更多的朋友。BTW, ARM_Cortex-M0/3 DesignStart系列会持续更新,只是中间可能会穿插其他知识点。SWD是Serial Wire Debug的简称,翻译成中文是”串行线调试”。

2302_79847220的博客 6858

Grails边做边学入门篇[0]--------讲讲什么是Grails

以前博客里面写过几篇关于Grails的文章,那时我刚刚接触Grails,但是由于个人比较懒,所以没有把那个系列的博客坚持写下来,现在打算重新写一下,毕竟自己接触了一段时间,也有了些真正的体会。在这里介绍一些入门级别的知识,欢迎大神们雅正,新手们可以在此讨论。         首先给出百度百科对于Grails的定义:         Grails是一套用于快速Web应用开发的开源框架,它基于Gr

JustCoding_的专栏 3491

掌握SiOME:从零构建OPC UA信息模型的完整指南

本文是掌握SiOME工具的完整指南,详细介绍了如何利用这款免费且强大的OPC UA建模工具,从零开始构建信息模型。内容涵盖从获取软件、创建命名空间、定义对象类型与变量,到添加方法、生成XML文件,并最终将其集成到开源的open62541服务器中。通过可视化建模,开发者可以高效、准确地设计复杂模型,大幅提升工业物联网与自动化项目的开发效率。

tcp8optimizer的博客 514

Grails框架优劣势

原文地址:http://www.infoq.com/cn/articles/case-study-grails-partii grails的思想 1.Don't Repeat Yourself 不要重复你自己 2.Convention over Configuration 约束优于配置    DRY和约定优先于配置的思想,是由...

weixin_30385925的博客 240

YOLO26优化:注意力魔改 | EMA:基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA

加入EMA注意力,一种基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA等经典注意力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 332

基于Qt C++开发一个体测数据管理系统

advice.dietAdvice = "饮食建议:\n1. 控制总热量摄入,每天减少300-500大卡\n2. 减少精制碳水(白米饭、白面包、甜食)\n3. 增加优质蛋白和膳食纤维摄入\n4. 烹饪方式以蒸、煮、烤、凉拌为主,减少油炸\n5. 晚餐适量减少,睡前3小时避免进食";dataTable->setHorizontalHeaderLabels({"ID", "用户名", "身高(cm)", "体重(kg)", "BMI", "体脂率(%)", "记录时间"});

寒寒豆豆软件公司的博客 192

java 和grails_Play框架和Grails对比

Play框架和Grails对比Play它是目前市面上的最好的框架之一。开发人员喜欢它,因为它是很容易编程,可扩展性和强大的。使用是Scala语言编程。开发人员经常进行少量修改和测试以便找出最佳的解决方案。一般情况下,他们需要重新启动系统才看到他们所做的更改。不过,如果你使用Play,所有你需要做的就是刷新浏览器就立即看到最近发生的变化。它只有一个XML文件进行配置,令人欣慰的是,大多数的配置,要么...

weixin_35804557的博客 203

[毕设项目-MCP+ENSP]一句话搞定ENSP自动化:MCP + LLM实战(架构图、工具清单、踩坑全解)

用 MCP + LLM 把“人话”变成对华为 ENSP 的安全自动化操作,三款工具覆盖配置/查询/落盘,配套架构、实战与排坑清单。

逐梦苍穹的博客 2536

Play和Grails Java框架的优缺点

框架通过为程序员提供一些有用的功能来简化应用程序开发过程。 由于开发人员的普遍使用,Java框架经常被开发人员使用。 您可以在市场上找到各种Java开发框架。 新手开发人员经常在论坛上发布一个常见问题:“哪种Java框架是最好的?” 首先,没有一个最好的框架,因为它们都有优点和缺点。 因此,您必须决定考虑项目要求。 您必须考虑关键因素,例如可伸缩性,复杂性,截止日期以及显然的预算。 今...

最佳 Java 编程 410

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2602

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

grails 优缺点分析

  Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。 易于使用的基于Hibernate的对象-关系映射(ORM)层 称为Groovy Server Pages (GSP)的表现层技术 基于SpringMVC的控制器层 构建于Gant上的命令行脚本运行环境 内置Jett...

weixin_30287169的博客 282

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Grails框架使用教程

第一章 grails框架简介 1.1 简介 Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。 第二章 grails使用 2.1 教程环境介绍 ▲系统:windows10 ▲grails框架:2.4.4 ▲jdk版本: java version "1.8...

冰羽IOX的专栏 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

久没上来,发现grails文章的浏览量比较多,看来现在国内用grails+groovy的人越来越多了

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

专注于Groovy语言,grails框架与管理之道 2677

Play和Grails框架的优缺点

框架为程序员提供了一些有用的特性从而简化了应用开发的过程。Java开发人员经常使用框架,由于框架非常流行,因此市场上你会发现各种各样的Java框架。新手经常在论坛里面提问,“哪个Java框架最好?" 首先,没有一个框架是最好的,因为他们都有自己的优点和缺点。因此,你必须结合项目的需求来进行考虑。你必须考虑到像可伸缩性,复杂性,截止日期等关键因素,当然了,还有预算。 今天,我们来讨论...

spidercoco的专栏 349
上一篇: Grails 开发手册
下一篇: 案例研究:利用Grails搭建Feedlr.com网站
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值