当前位置:   article > 正文

论SOA架构的几种主要开发方式

soa架构

面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。Soa的开发方法一般主要有开源的dubbo、dubbox、mule、wso2、cxf,以及付费的oracle soa、ibm soa等。

SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。

SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。

SOA的实施具有几个鲜明的基本特征。实施SOA的关键目标是实现企业IT资产的最大化作用。要实现这一目标,就要在实施SOA的过程中牢记以下特征:

可从企业外部访问

随时可用

粗粒度的服务接口分级

松散耦合

可重用的服务

服务接口设计管理

标准化的服务接口

支持各种消息模式

精确定义的服务契约

SOA服务具有平台独立的自我描述XML文档。Web服务描述语言(WSDL,Web Services Description Language)是用于描述服务的标准语言。

SOA服务用消息进行通信,该消息通常使用XML Schema来定义(也叫做XSD,XML Schema Definition)。消费者和提供者或消费者和服务之间的通信多见于不知道提供者的环境中。服务间的通讯也可以看作企业内部处理的关键商业文档。

在一个企业内部,SOA服务通过一个扮演目录列表(directory listing)角色的登记处(Registry)来进行维护。应用程序在登记处(Registry)寻找并调用某项服务。统一描述,定义和集成(UDDI,Universal Description,Definition,and Integration)是服务登记的标准。

每项SOA服务都有一个与之相关的服务品质(QoS,quality of service)。QoS的一些关键元素有安全需求(例如认证和授权),可靠通信(注:可靠消息是指,确保消息“仅且仅仅”发送一次,从而过滤重复信息。),以及谁能调用服务的策略。

随着全球信息化的浪潮,信息化产业不断发展、延伸,已经深入了众多的企业及个人,SOA系统架构的出现,将给信息化带来一场新的革命。

纵观信息化建设与应用的历程,尽管出现过XML(标准通用标记语言的子集)、Unicode、UML等众多信息标准,但是许多异构系统之间的数据源仍然使用各自独立的数据格式、元数据以及元模型,这是信息产品提供商一直以来形成的习惯。各个相对独立的源数据集成一起,往往通过构建一定的数据获取与计算程序来实现,这样的做法需要花费大量工作。信息孤岛大量存在的事实,使信息化建设的ROI(投资回报率)大大降低,ETL成为集中这些异构数据的有效工具。ETL常用于从源系统中提取数据,将数据转换为与目标系统相兼容的格式,然后将其装载到目标系统中。数据经过获取、转换、装载后,要产生应用价值,还需另外的数据展现工具予以实现,如此复杂的数据应用过程,必定产生高昂的应用成本。

结构化的数据管理尚可通过以上方法,予以实现其集成应用。在非结构化的内容方面,这些具有挑战性的问题令人生畏。内容管理的应用方案基于不同的信息化应用系统,而且大部分是纵向的以组织部门为界限的。在内容管理市场中,经常使用来自不同厂商的产品来提供这些解决方案。即使是同一个厂商的产品,相互之间的功能也是经常重叠,并且无法集成。

随着信息化建设的深入,不同应用系统之间的功能界限已趋于模糊。同时企业资源计划系统和协同商务系统,又需要商业智能的分析展现数据提供用户操作依据。

在激烈竞争且多变的市场环境下,企业的管理模式很难固化,应用传统的信息化软件,当企业要做出一些改动时需要面对巨大的挑战。

2000WebService出现后,SOA被誉为下一代Web服务的基础框架,已经成为计算机信息领域的一个新的发展方向。

SOA的出现给传统的信息化产业带来新的概念,不再是各自独立的架构形式,能够轻松的互相联系组合共享信息。

可复用以往的信息化软件。基于SOA的协同软件提供了应用集成功能,能够将ERP、CRM、HR等异构系统的数据集成。

松散耦合方式,只要充分了解业务的进程,就可以不用编写一行代码,通过流程图实现一套我们自己的信息系统。就像已经给你准备好了砖瓦和水泥,只需要想好盖什么样的房子就可以轻松的盖起。加快开发速度,并且减少了开发和维护的费用。软件将所有的管理提炼成表单和流程,以记录管理的内容,指定过程的流转方向。

更简便的信息和数据集成。信息集成功能可以将散落在广域网和局域网上的文档、目录、网页轻松集成,加强了信息的协同相关性。同时,复杂、成本高昂的数据集成,也变成了可以简单且低成本实现的参数设定。创建了完全集成的信息化应用新领域。

在具体的功能实现上,SOA协同软件所实现的功能包括了知识管理、流程管理、人事管理、客户管理、项目管理、应用集成等,从部门角度看涉及了行政、后勤、营销、物流、生产等。从应用思想上看,SOA协同软件中的信息管理功能,全面兼顾了贯穿整个企业组织的信息化软硬件投入。尽管各种IT技术可以用于不同的用途,但是信息管理并没有任意地将信息分为结构化或者非结构化的部分,因此ERP等结构化管理系统并不是信息化建设的全部;同时,信息管理也没有将信息化解决方案划分为部门的视图,因此仅仅以部分为界限去构建软件应用功能的思想未必是不可撼动的。基于SOA的协同软件与 ERP、CRM等传统应用软件相比,关键的不同在于它可以在合适的时间、合适的地点并且有正当理由向需要它提供服务的任何用户提供服务。

利用SOA架构开发的优点:
  第一、更易维护
  业务服务提供者和业务服务使用者的松散耦合关系及对开放标准的采用确保了该特性的实现。建立在以 SOA基础上的信息系统,当需求发生变化的时候,不需要修改提供业务服务的接口,只需要调整业务服务流程或者修改操作即可,整个应用系统也更容易被维护。
  第二、更高的可用性
  该特点是在于服务提供者和服务使用者的松散耦合关系上得以发挥与体现。使用者无须了解提供者的具休实现细节。
  第三、更好的伸缩性
  依靠业务服务设计、开发和部署等所采用的架构模型实现伸缩性。使得服务提供者可以互相彼此独立地进行调整,以满足新的服务需求。

下面详细论述几种主要的开发方法和工具:

一.Dubbo。

DUBBO是淘宝公司的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。淘宝公司的许多应用就是采用dubbo,运行稳定成功。现在,不少企业采用dubbo开发应用系统。Dubbo是简单有效的soa架构,值得采用。

相比于其他服务框架,DUBBO有如下优势:

v透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入;

v软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点;

v服务自动注册与发现,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

其核心部分包含:

n远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

n集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

n自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo有如下功能:

n透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

n软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

n服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo基本原理-分布式服务框架

快速启动

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

服务提供者:定义服务接口

定义服务接口:(该接口需单独打包,在服务提供方和消费方共享)

在服务提供方实现接口

在服务提供方实现接口:(对服务消费方隐藏实现)

用Spring配置声明暴露服务

加载Spring配置

服务消费者:

加载Spring配置,并调用远程服务:(也可以使用IoC注入)

Zookeeper注册中心安装

n建议使用dubbo-2.3.3以上版本的zookeeper注册中心客户端。

nZookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心。

nDubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即可,所有注册中心逻辑适配都在调用Zookeeper客户端时完成。

开源网址:

http://alibaba.github.io/dubbo-doc-static/Home-zh.htm

Zookeeper下载地址:

http://zookeeper.apache.org/releases.html

Zookeeper注册中心安装:

http://alibaba.github.io/dubbo-doc-static/Zookeeper+Registry+Installation-zh.htm

二.Mule

Mule是一个以Java为核心的轻量级的消息框架和整合平台,基于EIP(Enterprise Integeration Patterns,由Hohpe和Woolf编写的一本书)而实现的。Mule的核心组件是UMO(UniversalMessage Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议(file,FTP,UDP,TCP,email,HTTP,SOAP,JMS等),并整合了许多流行的开源项目,比如Spring,ActiveMQ,CXF,Axis,Drools等。

MuleStudio是一个功能强大、用户界面友好的基于Eclipse的开发工具。使用者不需要深入了解Mule的XML配置语法,就可以在几分钟内轻松的创建、编辑、测试MuleESB流程。MuleStudio基于Eclipse技术,包含3个主要部件:项目结构树、工具箱和画布。项目结构树包含整个项目的目录结构。

Mule是一个企业服务总线(ESB)消息框架.它的主要特性包括:

1.基于J2EE1.4的企业消息总线(ESB)和消息代理(broker).
2.可插入的连接性:比如Jms,jdbc,tcp,udp,multicast,http,servlet,smtp,pop3,file,xmpp等.
3.支持任何传输之上的异步,同步和请求响应事件处理机制.
4.支持Axis或者Glue的Web Service.
5.灵活的部署结构[Topologies]包括Client/Server,P2P, ESB 和Enterprise Service Network.
6.与Spring 框架集成:可用作ESB 容器,也可以很容易的嵌入到Spring应用中.
7.使用基于SEDA处理模型的高度可伸缩的企业服务器.
8.强大的基于EIP模式的事件路由机制等.

三wso2。

WSO2ESB是一种根据ApacheV2.0许可证发布的快速、轻量级和灵活的企业服务总线产品。使用ESB在HTTP、HTTPS、JMS、mail等协议基础上通过业务系统过滤、转换、路由和处理SOAP,二进制、纯XML和文本消息。

WSO2ESB是一个为企业准备的完全成熟的ESB。WSO2ESB是建立在Apache Synapse项目基础上的。Apache Synapse是使用Apache Axis2创建的。

应用程序发送消息到ESB,该消息由ESB Transport捡起。

Transport通过消息管道发送消息。像安全和可靠的消息传递的信息方面的质量受到这个pipe的照顾。在该pipe内部是axis2的流入和流出流。ESB可以有如下两种操作:

消息中介:使用单管道

代理服务:使用独立的管道运输到不同的代理服务。

消息转换和消息路由可以看做一个独立的单元。如图所示,消息转换组件和路由组件之间没有明显的分离。WSO2ESB调用这个中介框架。一些转换发生在路由决定之前,一些转换发生在路由决定之后。这一部分由Synapse执行。

然后根据目的地将消息注入到独立的管道。在这里再次确定消息服务方面的质量。

传输层负责通过ESB所需的传输协议的转换。

该图显示了如何通过ESB的体系架构将请求传到一个实际的endpoint。响应处理是这个操作的反向操作。

所有这些组件可以通过WSO2ESB管理控制台管理和检测。

ESB Components

Transports

WSO2ESB支持所有广泛使用的传输协议包括HTTP/s、JMS、VFS和特定领域的传输如FIX。一个新的传输协议使用axis2传输框架轻松地被添加和插入到ESB中。不同的传输工具为ESB带来各种消息内容/负载。

传输内容:

消息建设者:允许使用内容类型标识消息并使变成普通的XML消息集。因此每个内容类型都有相关联的建设者。WSO2ESB包含基于文本的内容信息的建设者和二进制内容建设者。

消息格式:建设者的相反的搭档。格式化程序通过指出传输协议处理前消息内容的类型将消息转换回原始格式。类似transport的用户可以使用axis2框架实现消息的建设和格式化。

参阅Transports

端点(Endpoints)

Endpoints作为具有传输协议的逻辑组件。两套端点地址和WSDL。地址endpoint可以使用任何可用的transport调度消息。

参阅Endpoints

代理服务(ProxyServices)

在WSO2ESB中代理服务是实现使用消息接收器和开放接收消息的虚拟服务。一个代理服务可以使用类似于一个普通的web服务地址的url访问。代理服务允许将WSDL发布到用于先前使用的程序组。可以使用任何可用的传输协议从代理服务接收和发送消息。

参阅 Proxy Services Sample

主题(Topics)

Topics是另一个恢复消息处理事件的实施,包括subscription和events.

参阅eventing

中介(Mediators)

WSO2ESB的power仍然是为不同方面提供服务的全面调节库。使用mediator库实现广泛使用MEPs和EIPs。由于WSO2ESB提供了一个健康的框架,使得开发者写一个mediator非常容易。mediators可以使用包括Java,scripting和Spring的各种技术。

参阅mediator

序列(Sequences)

Sequence充当mediators的配置组件。Sequence允许阻止mediators实现管道和过滤模式。

参阅Sequences

任务和命令(Tasksand Commands)

Tasks提供在WSO2ESB中配置计划工作的设施并且允许执行mediation的内部或外部命令。

参阅Tasks

QoS组件(QoSComponents)

Qos组件实现可靠的消息传递和代理服务自带的Apache的Rempart和Sandesha两个实现模块的安全性。

配置、库/注册(Configuration,Repository/Registry)

Configuration是ESB架构的架构图。WSO2ESB提供了一个内置的 Repository/Registry存储配置和配置元数据,而且提供了使用远程库设施。

管理和配置界面(Managementand Configuration GUI)

有助于在生产环境中运行WSO2ESB组件可以在组件中找到。这些组件实现集群、高可用性和负载平衡功能。

GUI组件进行综合管理、配置和检测GUI。GUI通过分离前端和后端的关注实现了分层架构。这允许用户使用一个GUI控制台连接到多个后台。

WSO2ESB基于组件的体系结构加强了使用OSGi的松耦合性质。所有组件都建为OSGi包。

ESB特点(ESB Features)

完整的XML和Web服务支持

借助内置的XML、命名空间、XPath、XSLT、XQuery,WSO2ESB支持XML的处理需求。同时也能够很大程度上处理非XML的内容。

WSO2ESB主要支持的服务标准:

SOAP1.1/ SOAP1.2

WSDL1.1/WSDL1.2

WS寻址(支持双通道调用)

使用Apache Smart的安全的WS

使用Apache Sandesha2可靠的WS消息

使用Apache Savan的WS事件和WSO2事件

WS策略(支持传入/传出的消息分离策略)

MTOM/SwA优化二进制消息

XML/HTTP(POX)

REST格式

经验证的互操作性

基于通用的Apache Synapse和Apache Axis2项目,WSO2ESB已经证明含有Microsoft.NET的Web服务堆栈的互操作性

高性能

WSO2ESB优化了使用最少资源低延迟支持高吞吐量。可以使用连接节流支持成千上万的并发连接,以及使用一个恒定的内从占有的大量消息使用连接节流。非阻塞的IO和XML流组合的解析设计意味着ESB按照需求缩放而且仍能表现的很好。

最小定制开发

WSO2ESB旨在轻松的支持常见的要求,同时可能要扩展其功能。

这些功能:

基于内容的路由

虚拟化服务

负载平衡

发送故障

协议转化

传送消息

日志记录&检测

消息分裂和聚合

企业集成模式

节流要求

响应缓存

可扩展性

可以使用简单的Java扩展功能、POJO类、Spring以及使用JavaScript、Ruby或其它Apache BSF脚本语言扩展

多协议

支持以下内置协议整合存在的网络、伙伴及新工程

非阻塞的HTTPs协议

1.0和1.1的交易JMS传输二进制、文本和SOAP消息

Apache VFS文件传输(如:S/FTP、文件、zip/tar/gz、WebDAV、CIFS等)

支持多部分内容的邮件传输(POP3、IMAP、SMTP)

AMQP通过Apache QPid

金融信息交换(FIX)

Web服务的Hessian二进制协议

任务调度

支持管理经常性工作,通过ESB允许定期更新这些任务计划作为cron守护进程或简单重复的任务支持

事件驱动架构

内置的Qpid代理人作为事件代理人很容易实现使用EDA技术的企业集成。事件通过代理人可以调解执行发布之前的任何需求改变

内置的注册表

WSO2ESB附带一个集成的WSO2注册表,并且轻松的实现连接到外部/远程注册表

高级调解&EIP

WSO2ESB还内置了支持读取或写入到数据库,以及到Java/POJO类或脚本中调用。它也提供消息拆分、聚合、缓存和限制可以轻松的配置能力。

产业驱动协议

支持产业带动财政信息交换(FIX)协议使财政部分一体化和Hessian web服务协议支持二进制消息格式。AMQP、VFS和JMS作为运输企业集成。

国际化图形控制台

WSO2ESB提供了一整套的管理服务和一个图形化用户界面配置/管理/监测运行的WSO2ESB服务器。此图形控制台可以很容易的当后台运行在服务器上时与后台分离。可以在桌面上安装国际化的图形控制台而且还可以用于管理集群中的节点

序列编辑器

代理服务编辑器

端点/本地注册编辑器

任务调度

内置的注册表浏览器

策略编辑器

预定义的安全方案

用户存储

值存储

配置数据源

运输管理

服务尝试

日志、追踪和监测统计

服务管理

有力的通过管理控制台和JMX停止和重启ESB

系统监控

WSO2 ESB内通过JMX管理控制台以及配备了全面的监测能力。这些监控功能包括:

系统状态

系统统计图表

调解统计图表

调解追踪

SOAP追踪

日志配置和监控

四cxf。

ApacheCXF是一个开源的Services框架,CXF帮助您利用Frontend编程API来构建和开发Services,像JAX-WS。这些Services可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP或者CORBA,并且可以在多种传输协议上运行,比如:HTTP、JMS或者JBI,CXF大大简化了Services的创建,同时它继承了XFire传统,一样可以天然地和Spring进行无缝集成。

功能特性

CXF包含了大量的功能特性,但是主要集中在以下几个方面:

支持Web Services标准:CXF支持多种Web Services标准,包含SOAP、BasicProfile、WS-Addressing、WS-Policy、WS-ReliableMessaging和WS-Security。Frontends:CXF支持多种“Frontend”编程模型,CXF实现了JAX-WSAPI(遵循JAX-WS 2.0 TCK版本),它也包含一个“simplefrontend”允许客户端和EndPoint的创建,而不需要Annotation注解。CXF既支持WSDL优先开发,也支持从Java的代码优先开发模式。容易使用:CXF设计得更加直观与容易使用。有大量简单的API用来快速地构建代码优先的Services,各种Maven的插件也使集成更加容易,支持JAX-WSAPI,支持Spring 2.0更加简化的XML配置方式,等等。支持二进制和遗留协议:CXF的设计是一种可插拨的架构,既可以支持XML,也可以支持非XML的类型绑定,比如:JSON和CORBA。

项目目标

下面列出了来自Apache CXF官方网站的项目目标。

概要

高性能可扩展简单且容易使用支持多种标准

支持JAX-WS、JAX-RS、JSR-181和SAAJ;支持SOAP 1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM和WS-Policy;支持WSDL 1.1、2.0;支持MTOM;

多种传输方式、Bindings、DataBindings和Format

Bindings:SOAP、REST/HTTP;DataBndings:目前支持JAXB 2.0、Aegis两种,默认是JAXB 2.0。XMLBeans、Castor和JiBX数据绑定方式将在CXF 2.1版本中得到支持;格式(Format):XML、JSON;传输方式:HTTP、Servlet、JMS和Jabber;可扩展的API允许为CXF增加其它的Bindings,以能够支持其它的消息格式,比如:CSV和固定记录长度。

2Apache CXF特点编辑

灵活部署

轻量级容器:可在Tomcat或基于Spring的容器中部署Services;集成JBI:可以在如ServiceMix,OpenESBor Petals等等的JBI容器中将它部署为一个服务引擎;集成SCA:可以部署在如Tuscany之类的SCA容器中;集成J2EE:可以在J2EE应用服务器中部署Services,比如:Geronimo、JOnAS、JBoss、WebSphereApplication Server和WebLogic Application Server,以及Jetty和Tomcat;独立的Java客户端/服务器。

支持多种编程语言

全面支持JAX-WS 2.0客户端/服务器编程模型;支持JAX-WS 2.0 synchronous、asynchronous和one-way API's;支持JAX-WS 2.0 Dynamic Invocation Interface (DII) API;支持wrapped and non-wrapped风格;支持XML messaging API;支持JavaScript和ECMAScript 4 XML (E4X),客户端与服务端均支持;通过Yoko支持CORBA;通过Tuscany支持SCA;通过ServiceMix支持JBI;

代码生成

Java toWSDL;WSDLto Java;XSDto WSDL;WSDLto XML;WSDLto SOAP;WSDLto Service;

CXF框架支撑环境

CXF框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于CXF应用框架开发的企业应用,除了CXF框架本身之外,还需要JDK和Servlet容器的支持。

五dubbox。

当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即DubboeXtensions)。

主要的新功能包括:

·支持REST风格远程调用(HTTP +JSON/XML):基于非常成熟的JBoss RestEasy框架,在dubbo中实现了REST风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高的性能,在基准测试下,HTTP+ JSON与Dubbo 2.x默认的RPC协议(即TCP + Hessian2二进制序列化)之间只有1.5倍左右的差距,详见下文的基准测试报告。

·支持基于Kryo和FST的Java高效序列化实现:基于当今比较知名的Kryo和FST高性能序列化库,为Dubbo 默认的RPC协议添加新的序列化实现,并优化调整了其序列化体系,比较显著的提高了Dubbo RPC的性能,详见下图和文档中的基准测试报告。

·支持基于嵌入式Tomcat的HTTP remoting体系:基于嵌入式tomcat实现dubbo的HTTP remoting体系(即dubbo-remoting-http),用以逐步取代Dubbo中旧版本的嵌入式Jetty,可以显著的提高REST等的远程调用性能,并将Servlet API的支持从2.5升级到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等协议都基于这个HTTP remoting体系)。

·升级Spring:将dubbo中Spring由2.x升级到目前最常用的3.x版本,减少项目中版本冲突带来的麻烦。

·升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。

注:dubbox和dubbo 2.x是兼容的,没有改变dubbo的任何已有的功能和配置方式(除了升级了Spring之类的版本)。另外,dubbox也严格遵循了Apache 2.0许可证的要求。

总之,soa架构具有松耦合、高复用、开发、维护灵活方便、支持多平台多系统、对原系统良好支持、消除信息孤岛等许多优点,以dubbo为代表的开发方法有一百多种,以上5种主要的方法值得借鉴采用,相信一定会带来极好的价值!

以上为本人摘自电脑玩物网,作者:李万鸿

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/519510
推荐阅读
相关标签
  

闽ICP备14008679号