CN109426492A - 一种客户端软件开发方法及装置 - Google Patents
一种客户端软件开发方法及装置 Download PDFInfo
- Publication number
- CN109426492A CN109426492A CN201710571333.3A CN201710571333A CN109426492A CN 109426492 A CN109426492 A CN 109426492A CN 201710571333 A CN201710571333 A CN 201710571333A CN 109426492 A CN109426492 A CN 109426492A
- Authority
- CN
- China
- Prior art keywords
- data
- client
- logic
- platform
- business
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种客户端软件开发方法及装置,将客户端分成业务逻辑层和页面展示层两个独立的层级结构;业务逻辑层负责进行所有数据和业务处理,得到处理结果数据,并将处理结果数据提供给页面展示层进行展示。同一软件针对不同系统平台的客户端,其业务处理逻辑都相同,因此,不同系统平台可以复用业务逻辑层,然后,针对不同系统平台分别实现页面展示层即可;即,不用针对不同的系统平台重复开发客户端,利用该方法最终跨平台的客户端开发,极大地提高了软件程序开发效率,同时,降低了开发成本。而且,两个独立的层级结构是解耦的,每一层的开发方案都可以单独替代,从而减少了后续替代某一个层级结构的开发方案的成本。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种客户端软件开发方法及装置。
背景技术
客户端(或称为用户端),是指与服务器相对应,为客户提供本地服务的程序。通常安装在普通的客户机(例如,PC机、智能手机、平板电脑等终端)上,需要与服务端相互配合运行。根据客户端的运行环境不同,客户端分为基于Web浏览器的Web客户端和基于iOS系统或Android系统的Native APP(即,原生应用)。
不同平台的客户端所采用的编程语言不同,例如,Android APP的开发语言是Java、iOS APP的开发语言是Objective-C,Web APP可以采用超文本标记语言(Hyper TextMarkup Language,HTML)、层叠样式表(Cascading Style Sheets,CSS)、JavaScript等编程语言。因此,不同平台的客户端需要分别利用各自的编程语言开发,针对同一功能的客户端,软件开发人员需要分别编写三个客户端,这将极大地增加软件开发人员的工作量。
发明内容
有鉴于此,本发明的目的在于提供一种客户端软件开发方法及装置,以解决现有技术中无法合理实现跨平台的客户端开发问题,其技术方案如下:
第一方面,本申请提供一种客户端软件开发方法,包括:
利用基于JavaScript脚本语言的状态管理工具编写客户端的业务逻辑层,所述业务逻辑层用于处理所述客户端的所有数据和业务处理;
利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,所述页面展示层用于实现所述客户端的所有视图展示,所述目标系统平台包括:iOS系统、安卓系统或Web平台;
根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据;
将所述处理结果数据发送给所述目标页面展示层进行展示。
可选地,所述利用基于JavaScript脚本语言的状态管理工具编写客户端的业务逻辑层,包括:
按照所述客户端的业务逻辑创建状态数据结构,所述状态数据结构包括原生数据、经过action操作后的数据及进行业务逻辑处理之后的数据;
利用基于JavaScript脚本语言的状态管理工具编写所述客户端的业务处理逻辑,所述业务处理逻辑用于根据业务处理需求从所述状态数据结构中读取待处理数据,并根据所述业务处理逻辑处理所述待处理数据,得到处理结果数据,并将所述处理结果数据存储到所述状态数据结构中。
可选地,若所述目标系统平台为iOS系统或安卓系统,则所述利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,包括:
利用JavaScript脚本语言编写所述客户端的每个展示页面所包含的组件;
按照所述目标系统平台的页面显示逻辑,将所述组件转换成所述目标平台所能识别的页面配置文件;
将所述页面配置文件编译到所述目标系统平台。
可选地,若所述目标系统平台为Web平台,则所述利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,包括:
利用Web系统平台的UI实现技术编写所述客户端的每个展示页面所包含的组件;
按照所述目标系统平台的页面显示逻辑,将所述组件编译到所述目标系统平台。
可选地,所述根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据,包括:
利用Reselect函数计算所述业务逻辑层所要处理的数据,得到处理后的数据。
第二方面,本申请提供一种客户端软件开发装置,包括:
业务逻辑层获得单元,用于利用基于JavaScript脚本语言的状态管理工具编写客户端的业务逻辑层,所述业务逻辑层用于处理所述客户端的所有数据和业务处理;
页面展示层获得单元,用于利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,所述页面展示层用于实现所述客户端的所有视图展示,所述目标系统平台包括:iOS系统、安卓系统或Web平台;
数据映射单元,用于根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据,并将将所述处理结果数据发送给所述目标页面展示层进行展示。
可选地,所述业务逻辑层获得单元,包括:
数据结构创建子单元,用于按照所述客户端的业务逻辑创建状态数据结构,所述状态数据结构包括原生数据、经过action操作后的数据及进行业务逻辑处理之后的数据;
业务逻辑实现子单元,用于利用基于JavaScript脚本语言的状态管理工具编写所述客户端的业务处理逻辑,所述业务处理逻辑用于根据业务处理需求从所述状态数据结构中读取待处理数据,并根据所述业务处理逻辑处理所述待处理数据,得到处理结果数据,并将所述处理结果数据存储到所述状态数据结构中。
可选地,若所述目标系统平台为iOS系统或安卓系统,则所述页面展示层获得单元,包括:
第一组件开发子单元,用于利用JavaScript脚本语言编写所述客户端的每个展示页面所包含的组件;
组件组装子单元,用于按照所述目标系统平台的页面显示逻辑,将所述组件转换成所述目标平台所能识别的页面配置文件;
第一编译子单元,用于将所述页面配置文件编译到所述目标系统平台。
可选地,若所述目标系统平台为Web平台,则所述页面展示层获得单元,包括:
第二组件开发子单元,用于利用Web系统平台的UI实现技术编写所述客户端的每个展示页面所包含的组件;
第二编译子单元,用于按照所述目标系统平台的页面显示逻辑,将所述组件编译到所述目标系统平台。
可选地,所述数据映射单元用于根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据时,具体用于:
利用Reselect函数计算所述业务逻辑层所要处理的数据,得到处理后的数据。
本申请提供的客户端软件开发方法,将客户端分成业务逻辑层和页面展示层两个独立的层级结构;业务逻辑层负责进行所有数据和业务处理,得到处理结果数据,并将处理结果数据提供给页面展示层进行展示。同一软件针对不同系统平台的客户端,其业务处理逻辑都相同,因此,不同系统平台可以复用业务逻辑层,然后,针对不同系统平台(例如,iOS系统、Android系统、Web系统)分别实现页面展示层即可;即,不用针对不同的系统平台重复开发客户端,利用该方法最终跨平台的客户端开发,极大地提高了软件程序开发效率,同时,降低了开发成本。而且,两个独立的层级结构是解耦的,每一层的开发方案都可以单独替代,从而减少了后续替代某一个层级结构的开发方案的成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例一种客户端软件开发方法的流程图;
图2是本申请实施例一种实现页面展示层的流程图;
图3是本申请实施例另一种实现页面展示层的流程图;
图4是本申请实施例一种实现业务逻辑层的流程图;
图5是本申请实施例一种客户端软件开发装置的框图;
图6是本申请实施例一种业务逻辑层获得单元的框图;
图7是本申请实施例一种页面展示层获得单元的框图;
图8是本申请实施例另一种页面展示层获得单元的框图。
具体实施方式
不同系统平台所使用的编程语言不同,因此,同一功能的软件针对不同系统平台的客户端需要分别利用各自的编程语言开发,这将会增加开发人员的工作量,增加开发成本。本申请提供的客户端软件开发方法,将客户端软件分成业务逻辑层和页面展示层两个独立的层级结构,两个层级结构之间是解耦的。业务逻辑层负责进行所有的业务和数据处理,得到处理结果数据,并将处理结果数据提供给页面展示层进行展示。不同系统平台的客户端可以复用业务逻辑层,然后,基于不同系统平台的客户端只需分别实现自身系统能识别的页面展示层即可,从而极大地提高了软件程序开发效率,同时也降低了客户端的开发成本。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,示出了本申请实施例一种客户端软件开发方法的流程图,该方法应用于计算机设备中,如图1所示,该方法可以包括以下步骤:
S110,利用基于JS脚本语言的状态管理工具编写客户端的业务逻辑层。
业务逻辑是指该客户端软件所处领域中的业务数据、处理规则、处理流程的集合,即使没有所有的View层,业务逻辑层也能运作。该业务逻辑层负责处理所述客户端的所有数据和业务处理。
其中,数据包括:超文本传输协议(Hyper Text Transfer Protocol,HTTP)请求、客户端用户产生的数据、缓存数据、用户界面(User Interface,UI)状态(例如,当前的路由、分页数和登录状态等等)。
状态管理工具可以是Redux或mobx,当然也可以采用其它能够解决应用状态管理的工具。其中,Redux和mobx都是基于JavaScript编程语言的技术。
S120,利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层转换成与目标系统平台所能识别的目标页面展示层。
不同系统平台可以共用业务逻辑层,但是,对于页面展示层,各个系统平台都有各自平台相关的UI组件,所以各个系统平台的UI实现方式各不相同,因此,需要针对各个系统平台分别实现页面展示层。目前的主流系统平台包括iOS系统、Android系统、Web系统平台等。目标系统平台可以是上述系统平台中的任意一个。
页面展示层负责视图管理,即View的渲染,可以采用现有的React、Vue、Angular、React Native等技术实现。不同的系统平台需要选用相应的技术来实现,例如,Web系统平台可以采用React技术,iOS系统平台可以采用React Native for iOS的技术实现,Android系统平台可以采用React Native for Android的技术实现。在本申请的其它实施例中,也可以使用其它技术实现各个系统平台的页面展示层,本申请并不限定。
虽然不同平台的实现方式有所差异,但整体都遵循一个原则,即组件化开发,APP经路由控制,分为逻辑上的很多页面,每个页面是一个大的View(视图),每个页面又由很多小的View(视图)组成,整个APP形成一颗倒立的组件树,APP的状态数据绑定在根节点上,随着组件树逐级按需往下传递,因此,软件构架很清晰,便于开发维护,另外,组件的复用提高了开发效率,减少了维护成本。
在本申请的一个实施例中,如图2所示,针对Native App(例如,iOS App或AndroidApp)而言,实现页面展示层的过程可以包括:
S121,利用JS脚本语言编写Native App的每个展示页面所包含的组件。
在本申请的一个实施例中,可以将UI组件主要分成两类:基础组件和业务组件;
基础组件即在应用开发中,具有通用功能且独立,可能出现在很多地方的控件,例如,按钮、导航、选项卡等控件。可以把这一部分组件单独抽离出来,以达到复用的效果。
业务组件相比基础组件,会包含一定的业务逻辑,例如,在城市选择器这个控件在在线票务APP中可能出现在多个页面中,同时涉及获取城市信息等业务信息,所以也将此类组件抽离出来,以便实现复用。
在本申请的一个实施例中,还有大量的页面和一些一次性的组件,这部分组件基本没有复用性可言,但是,也采用组件化的开发方式来管理,相当于所有View层的东西都以组件的方式来管理,方便开发和统一认知。
S122,按照目标系统平台的页面显示逻辑,将所述组件转换成所述目标平台所能识别的页面配置文件。
按照目标系统平台的页面显示逻辑将S121创建的组件组装成一个个页面。iOS
S123,将所述页面配置文件编译到所述目标系统平台。
实际开发过程中,上述S121~S123可以利用React Native技术实现,对于Android平台可以采用React Native for Android实现;对于iOS平台可以采用React Native foriOS实现。;利用React Native技术实现的Android平台View层的代码文件以.android.js作为后缀;利用React Native for iOS技术实现的iOS平台的View层的代码文件以.iOS.js作为后缀;React Native在编译View层的代码文件的时候,能够探测出文件后缀,编译文件到对应的平台中。
利用React Native针对Android和iOS的设计,这两个系统平台可以实现非常高的复用度,两个系统平台大概有80%~95%的可复用代码,只需要针对很小一部分不一致的地方分别实现即可。
对于Web App而言,因为不能直接利用React Native技术,需要单独开发Web App的View层,但View层的开发方式与React Native区别不大,开发思路相同。
如图3所示,Web App实现页面展示层的过程可以包括以下步骤:
S124,利用基于Web平台的UI实现技术实现所述客户端的每个展示页面所包含的组件。
对于Web APP而言,其View层实现采用与React Native技术思想相同的组件开发方式。web平台可以采用React、CSS、JS等实现UI组件开发。
S125,按照目标系统平台的页面显示逻辑,将所述组件编译到目标系统平台。
按照Web App的页面显示逻辑组装各个组件得到页面,最终实现Web App的View层。
S130,根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据。
在本申请的一个实施例中,待处理数据就是指客户端所要处理的数据;例如,待处理数据可以包括HTTP请求、客户端用户产生的数据、缓存数据、UI状态等。
在本申请的一个实施例中,使用Reselect来计算所要处理的数据,Reselect库能够创建可记忆的、可组合的Selector函数,可以用来高效地计算Redux Store里的衍生数据。Selector实际上是一个纯函数,纯函数具有可缓存性,即对于同样的输入参数,得到相同的输出值。Reselect的原理是每次调用selector函数之前,判断输入参数与之前缓存输入参数的是否有差异,若无差异,则直接返回缓存的输出结果,反之,则重新计算本次输入参数所对应的输出结果。利用Reselect来处理数据,能够提高数据处理效率,更高效地利用缓存数据。
利用Reselect组装View所需的数据以及进行数据计算,这个数据可能来自多个业务model。例如,在选座页面会呈现出影片的信息、影院的信息、座位图的信息,这就需要影片、影院和座位信息三个实体model中获取数据(即,调用三次action),然后计算得到处理结果数据。
S140,将处理结果数据发送给所述目标页面展示层进行展示。
业务逻辑层处理待处理数据后,将得到的处理结果数据发送给目标页面展示层进行展示。
State(即,业务逻辑层)不仅仅只是数据这么简单,还包括经过action操作之后的数据(即处理了业务逻辑之后的数据)。
State是一种状态,他会随着用户与应用之间的交互而变化,因此,在任意时刻都会有一个唯一的State与之对应。对于每一个State,会得到一个对应的视图,即,V=f(S),其中,V即视图,S即状态,f就是从State到View的映射关系,可以简单地理解为将当前State在View中呈现出来,而当State发生变化时,View也会随之变化。而且,State不会一直不变,用户总会与应用程序进行交互(action),涉及到路由变化、提交数据到服务器、从服务器获取新数据等等,这些交互都会导致数据层的变化。对于不同的系统平台,f的实现方式不同,例如,React、Vue、React Native。
本实施例提供的客户端软件开发方法,将客户端分成业务逻辑层和页面展示层两个独立的层级结构;业务逻辑层负责进行所有数据和业务处理,得到处理结果数据,并将处理结果数据提供给页面展示层进行展示。同一软件针对不同系统平台的客户端,其业务处理逻辑都相同,因此,不同系统平台可以复用业务逻辑层,然后,针对不同系统平台(例如,iOS系统、Android系统、Web系统)分别实现页面展示层即可;即,不用针对不同的系统平台重复开发客户端,利用该方法最终跨平台的客户端开发,极大地提高了软件程序开发效率,同时,降低了开发成本。而且,两个独立的层级结构是解耦的,每一层的开发方案都可以单独替代,从而减少了后续替代某一个层级结构的开发方案的成本。
请参见图4,示出了本申请实施例一种实现业务逻辑层的流程图,如图4所示,实现业务逻辑层的过程可以包括:
S210,按照客户端的业务逻辑创建状态数据结构;
状态数据结构包括原生数据、经过action操作后的数据及进行业务逻辑处理之后的数据。
不同项目对应的客户端所要实现的业务不同,但是,每个项目的客户端所涉及到的数据可以分为两个类型,一种是业务实体数据,另一种是UI数据。
下面以在线票务平台为例,说明状态数据结构。用户可以通过在线票务平台购买电影票、演出票等。以电影票为例,业务实体数据包括:正在热映列表、即将上映列表、电影详情、影院列表、影院详情、座位信息、支付信息、订单中心、用户中心等等;如果按照业务逻辑来组织状态,得到如下的状态数据结构:
这样,所有的数据结构一目了然,对上述所有分类后的数据进行存储,然后所有的页面都从这个数据结构中获取相应的数据进行展示。
S220,利用基于JS脚本语言的状态管理工具编写所述客户端的业务处理逻辑。
所述业务处理逻辑用于根据业务处理需求从所述状态数据结构中读取待处理数据,并根据所述业务处理逻辑处理所述待处理数据,得到处理结果数据,并将所述处理结果数据存储到所述状态数据结构中。
在本申请的一个实施例中,可以利用Redux技术或Mobx技术实现业务逻辑层。
Redux是针对JavaScript应用的可预测状态容器,Redux把界面视为一种状态机,界面里的所有状态、数据都可以由一个状态树来描述,所以对于界面的任何变更都简化成了状态机的变化。Redux的处理过程分成三个阶段:分别是action、reduce和store;所谓action就是用一个对象描述发生了什么,Redux中一般使用一个纯函数,即actionCreator来生成action对象。然后,这个action对象和当前的状态树(即,state)会被传入到reduce中,产生一个新的状态;store的作用就是储存state并且监听其变化。
本实施例提供的业务逻辑层实现过程,利用基于JS脚本语言的状态管理工具实现业务逻辑层,安装iOS系统或Android系统的移动端具有与JS代码通讯的能力,而且,Web系统平台的自身脚本语言就是JS,因此,三个系统平台都能够调用JS代码,从而实现不同的系统平台复用业务逻辑层。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
相应于上述的客户端软件开发方法实施例,本申请还提供了客户端软件开发装置实施例。
请参见图5,示出了本申请实施例一种客户端软件开发装置的框图,该装置应用于软件开发终端中,如图5所示,该装置可以包括:业务逻辑层获得单元510、页面展示层获得单元520和数据映射单元530。
业务逻辑层获得单元510,用于利用基于JS脚本语言的状态管理工具编写客户端的业务逻辑层。
业务逻辑是指该客户端软件所处领域中的业务数据、处理规则、处理流程的集合,即使没有所有的View层,业务逻辑层也能运作。该业务逻辑层用于处理所述客户端的所有数据和业务处理。
状态管理工具可以是Redux或mobx,当然也可以采用其它能够解决应用状态管理的工具。其中,Redux和mobx都是基于JavaScript编程语言的技术。
Redux是针对JavaScript应用的可预测状态容器,Redux把界面视为一种状态机,界面里的所有状态、数据都可以由一个状态树来描述,所以对于界面的任何变更都简化成了状态机的变化。Redux的处理过程分成三个阶段:分别是action、reduce和store;所谓action就是用一个对象描述发生了什么,Redux中一般使用一个纯函数,即actionCreator来生成action对象。然后,这个action对象和当前的状态树(即,state)会被传入到reduce中,产生一个新的状态;store的作用就是储存state并且监听其变化。
在本申请的一个实施例中,如图6所示,业务逻辑层获得单元510包括:数据结构创建子单元511和业务逻辑实现子单元512。
数据结构创建子单元511,用于按照客户端的业务逻辑创建状态数据结构,所述状态数据结构包括原生数据、经过action操作后的数据及进行业务逻辑处理之后的数据。
不同项目对应的客户端所要实现的业务不同,但是,每个项目的客户端所涉及到的数据可以分为两个类型,一种是业务实体数据,另一种是UI数据。
业务逻辑实现子单元512,用于利用基于JS脚本语言的状态管理工具编写客户端的业务处理逻辑。
业务处理逻辑用于根据业务处理需求从所述状态数据结构中读取待处理数据,并根据所述业务处理逻辑处理所述待处理数据,得到处理结果数据,并将所述处理结果数据存储到所述状态数据结构中。
页面展示层获得单元520,用于利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台。
所述页面展示层用于实现所述客户端的所有视图展示,所述目标系统平台可以是iOS系统、安卓系统或Web平台中的任意一个。
不同系统平台可以共用业务逻辑层,但是,对于页面展示层,各个系统平台都有各自平台相关的UI组件,所以各个系统平台的UI实现方式各不相同,因此,需要针对各个系统平台分别实现页面展示层。
页面展示层负责视图管理,即View的渲染,可以采用现有的React、Vue、Angular、React Native等技术实现。不同的系统平台需要选用相应的技术来实现,例如,Web系统平台可以采用React技术,iOS系统平台可以采用React Native for iOS的技术实现,Android系统平台可以采用React Native for Android的技术实现。在本申请的其它实施例中,也可以使用其它技术实现各个系统平台的页面展示层,本申请并不限定。
在本申请的一个实施例中,目标系统平台为iOS系统或安卓系统,如图7所示,所述页面展示层获得单元520包括:第一组件开发子单元521、组件组装子单元522和第一编译子单元523。
第一组件开发子单元521,用于利用JS脚本语言编写所述客户端的每个展示页面所包含的组件。
UI组件主要分成两类:基础组件和业务组件;
基础组件即在应用开发中,具有通用功能且独立,可能出现在很多地方的控件,例如,按钮、导航、选项卡等控件。可以把这一部分组件单独抽离出来,以达到复用的效果。
业务组件相比基础组件,会包含一定的业务逻辑,例如,在城市选择器这个控件在在线票务APP中可能出现在多个页面中,同时涉及获取城市信息等业务信息,所以也将此类组件抽离出来,以便实现复用。
在本申请的一个实施例中,还有大量的页面和一些一次性的组件,这部分组件基本没有复用性可言,但是,也采用组件化的开发方式来管理,相当于所有View层的东西都以组件的方式来管理,方便开发和统一认知。
组件组装子单元522,用于按照所述目标系统平台的页面显示逻辑,将所述组件转换成所述目标平台所能识别的页面配置文件。
按照目标系统平台的页面显示逻辑将创建的组件组装成一个个页面。
第一编译子单元523,用于将所述页面配置文件编译到所述目标系统平台。
在本申请的另一个实施例中,目标系统平台为Web平台,如图8所示,页面展示层获得单元520可以包括:第二组件开发子单元524和第二编译子单元525;
第二组件开发子单元524,用于利用Web系统平台的UI实现技术编写所述客户端的每个展示页面所包含的组件。
对于Web APP而言,其View层实现采用与React Native技术思想相同的组件开发方式。web平台可以采用React、CSS、JS等实现UI组件开发。
第二编译子单元525,用于按照所述目标系统平台的页面显示逻辑,将所述组件编译到所述目标系统平台。
按照Web App的页面显示逻辑组装各个组件得到页面,最终实现Web App的View层。
数据映射单元530,用于根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据,并将将所述处理结果数据发送给所述目标页面展示层进行展示。
在本申请的一个实施例中,利用Reselect函数计算所述业务逻辑层所要处理的数据,得到处理后的数据。使用Reselect来计算所要处理的数据,Reselect库能够创建可记忆的、可组合的Selector函数,可以用来高效地计算Redux Store里的衍生数据。Selector实际上是一个纯函数,纯函数具有可缓存性,即对于同样的输入参数,得到相同的输出值。Reselect的原理是每次调用selector函数之前,判断输入参数与之前缓存输入参数的是否有差异,若无差异,则直接返回缓存的输出结果,反之,则重新计算本次输入参数所对应的输出结果。利用Reselect来处理数据,能够提高数据处理效率,更高效地利用缓存数据。
本实施例提供的客户端软件开发方法,将客户端分成业务逻辑层和页面展示层两个独立的层级结构;业务逻辑层负责进行所有数据和业务处理,得到处理结果数据,并将处理结果数据提供给页面展示层进行展示。同一软件针对不同系统平台的客户端,其业务处理逻辑都相同,因此,不同系统平台可以复用业务逻辑层,然后,针对不同系统平台(例如,iOS系统、Android系统、Web系统)分别实现页面展示层即可;即,不用针对不同的系统平台重复开发客户端,利用该方法最终跨平台的客户端开发,极大地提高了软件程序开发效率,同时,降低了开发成本。而且,两个独立的层级结构是解耦的,每一层的开发方案都可以单独替代,从而减少了后续替代某一个层级结构的开发方案的成本。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种客户端软件开发方法,其特征在于,包括:
利用基于JavaScript脚本语言的状态管理工具编写客户端的业务逻辑层,所述业务逻辑层用于处理所述客户端的所有数据和业务处理;
利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,所述页面展示层用于实现所述客户端的所有视图展示,所述目标系统平台包括:iOS系统、安卓系统或Web平台;
根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据;
将所述处理结果数据发送给所述目标页面展示层进行展示。
2.根据权利要求1所述的方法,其特征在于,所述利用基于JavaScript脚本语言的状态管理工具编写客户端的业务逻辑层,包括:
按照所述客户端的业务逻辑创建状态数据结构,所述状态数据结构包括原生数据、经过action操作后的数据及进行业务逻辑处理之后的数据;
利用基于JavaScript脚本语言的状态管理工具编写所述客户端的业务处理逻辑,所述业务处理逻辑用于根据业务处理需求从所述状态数据结构中读取待处理数据,并根据所述业务处理逻辑处理所述待处理数据,得到处理结果数据,并将所述处理结果数据存储到所述状态数据结构中。
3.根据权利要求1所述的方法,其特征在于,若所述目标系统平台为iOS系统或安卓系统,则所述利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,包括:
利用JavaScript脚本语言编写所述客户端的每个展示页面所包含的组件;
按照所述目标系统平台的页面显示逻辑,将所述组件转换成所述目标平台所能识别的页面配置文件;
将所述页面配置文件编译到所述目标系统平台。
4.根据权利要求1所述的方法,其特征在于,若所述目标系统平台为Web平台,则所述利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,包括:
利用Web系统平台的UI实现技术编写所述客户端的每个展示页面所包含的组件;
按照所述目标系统平台的页面显示逻辑,将所述组件编译到所述目标系统平台。
5.根据权利要求1所述的方法,其特征在于,所述根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据,包括:
利用Reselect函数计算所述业务逻辑层所要处理的数据,得到处理后的数据。
6.一种客户端软件开发装置,其特征在于,包括:
业务逻辑层获得单元,用于利用基于JavaScript脚本语言的状态管理工具编写客户端的业务逻辑层,所述业务逻辑层用于处理所述客户端的所有数据和业务处理;
页面展示层获得单元,用于利用目标编程语言编写所述客户端的页面展示层,并将所述页面展示层对应的代码编译到目标系统平台,所述页面展示层用于实现所述客户端的所有视图展示,所述目标系统平台包括:iOS系统、安卓系统或Web平台;
数据映射单元,用于根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据,并将将所述处理结果数据发送给所述目标页面展示层进行展示。
7.根据权利要求6所述的装置,其特征在于,所述业务逻辑层获得单元,包括:
数据结构创建子单元,用于按照所述客户端的业务逻辑创建状态数据结构,所述状态数据结构包括原生数据、经过action操作后的数据及进行业务逻辑处理之后的数据;
业务逻辑实现子单元,用于利用基于JavaScript脚本语言的状态管理工具编写所述客户端的业务处理逻辑,所述业务处理逻辑用于根据业务处理需求从所述状态数据结构中读取待处理数据,并根据所述业务处理逻辑处理所述待处理数据,得到处理结果数据,并将所述处理结果数据存储到所述状态数据结构中。
8.根据权利要求6所述的装置,其特征在于,若所述目标系统平台为iOS系统或安卓系统,则所述页面展示层获得单元,包括:
第一组件开发子单元,用于利用JavaScript脚本语言编写所述客户端的每个展示页面所包含的组件;
组件组装子单元,用于按照所述目标系统平台的页面显示逻辑,将所述组件转换成所述目标平台所能识别的页面配置文件;
第一编译子单元,用于将所述页面配置文件编译到所述目标系统平台。
9.根据权利要求6所述的装置,其特征在于,若所述目标系统平台为Web平台,则所述页面展示层获得单元,包括:
第二组件开发子单元,用于利用Web系统平台的UI实现技术编写所述客户端的每个展示页面所包含的组件;
第二编译子单元,用于按照所述目标系统平台的页面显示逻辑,将所述组件编译到所述目标系统平台。
10.根据权利要求6所述的装置,其特征在于,所述数据映射单元用于根据所述业务逻辑层的业务处理逻辑处理待处理数据,得到处理结果数据时,具体用于:
利用Reselect函数计算所述业务逻辑层所要处理的数据,得到处理后的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710571333.3A CN109426492A (zh) | 2017-07-13 | 2017-07-13 | 一种客户端软件开发方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710571333.3A CN109426492A (zh) | 2017-07-13 | 2017-07-13 | 一种客户端软件开发方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109426492A true CN109426492A (zh) | 2019-03-05 |
Family
ID=65497626
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710571333.3A Pending CN109426492A (zh) | 2017-07-13 | 2017-07-13 | 一种客户端软件开发方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109426492A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532495A (zh) * | 2019-08-30 | 2019-12-03 | 郑州阿帕斯科技有限公司 | 一种网页信息的展示方法及装置 |
CN110727742A (zh) * | 2019-10-12 | 2020-01-24 | 深圳市康必达控制技术有限公司 | 一种可跨端部署的业务编排方法及系统 |
CN110737858A (zh) * | 2019-10-16 | 2020-01-31 | 紫光云技术有限公司 | 一种跨平台页面显示方法 |
CN111124397A (zh) * | 2019-12-10 | 2020-05-08 | 北京慧虹远航科技有限公司 | 控制逻辑的复用方法、装置、计算机设备和存储介质 |
CN111679828A (zh) * | 2020-05-25 | 2020-09-18 | 泰康保险集团股份有限公司 | 一种数据处理的方法及装置、电子设备、存储介质 |
CN112035117A (zh) * | 2020-08-27 | 2020-12-04 | 北京三快在线科技有限公司 | 页面展示系统、方法及装置 |
CN112114777A (zh) * | 2020-09-09 | 2020-12-22 | 深圳市紫金支点技术股份有限公司 | 一种atmc应用软件开发方法、智能终端、存储介质 |
CN112286500A (zh) * | 2020-09-28 | 2021-01-29 | 珠海大横琴科技发展有限公司 | 一种前端系统 |
CN112637086A (zh) * | 2020-12-11 | 2021-04-09 | 苏州浪潮智能科技有限公司 | 一种基于模块自动化编译的通信方法、系统及介质 |
CN113419710A (zh) * | 2021-06-25 | 2021-09-21 | 北京悟空出行科技有限公司 | 小程序的开发方法、装置、电子设备和介质 |
CN117008896A (zh) * | 2023-09-28 | 2023-11-07 | 云粒智慧科技有限公司 | 基于地图应用的软件系统及其构建方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102117294A (zh) * | 2009-12-31 | 2011-07-06 | 上海杉达学院 | 一种基于ajax技术的信息系统 |
US20150058260A1 (en) * | 2009-02-11 | 2015-02-26 | Johnathan C. Mun | System for Modeling Risk Valuations for a Financial Institution |
CN105574640A (zh) * | 2015-09-25 | 2016-05-11 | 国网浙江省电力公司 | 一种对应用进行统一综合管理平台建设的方法 |
CN105955744A (zh) * | 2016-05-03 | 2016-09-21 | 中国建设银行股份有限公司 | 一种移动跨平台开发系统及方法 |
CN106681704A (zh) * | 2015-11-11 | 2017-05-17 | 北大方正集团有限公司 | 用户界面的开发装置和开发方法 |
CN106843828A (zh) * | 2016-12-07 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 界面显示、加载方法及装置 |
-
2017
- 2017-07-13 CN CN201710571333.3A patent/CN109426492A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150058260A1 (en) * | 2009-02-11 | 2015-02-26 | Johnathan C. Mun | System for Modeling Risk Valuations for a Financial Institution |
CN102117294A (zh) * | 2009-12-31 | 2011-07-06 | 上海杉达学院 | 一种基于ajax技术的信息系统 |
CN105574640A (zh) * | 2015-09-25 | 2016-05-11 | 国网浙江省电力公司 | 一种对应用进行统一综合管理平台建设的方法 |
CN106681704A (zh) * | 2015-11-11 | 2017-05-17 | 北大方正集团有限公司 | 用户界面的开发装置和开发方法 |
CN105955744A (zh) * | 2016-05-03 | 2016-09-21 | 中国建设银行股份有限公司 | 一种移动跨平台开发系统及方法 |
CN106843828A (zh) * | 2016-12-07 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 界面显示、加载方法及装置 |
Non-Patent Citations (3)
Title |
---|
SMARTPHP: "Redux的中间件-Reselect", 《HTTPS://WWW.CNBLOGS.COM/VIDERING/ARTICLES/7567246.HTML》 * |
朱勇: "基于React Native 的移动办公应用开发实践", 《中国金融电脑》 * |
珍珠林: "Redux(基本用法)", 《 HTTPS://WWW.JIANSHU.COM/P/9DCFA43D4E5A》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532495A (zh) * | 2019-08-30 | 2019-12-03 | 郑州阿帕斯科技有限公司 | 一种网页信息的展示方法及装置 |
CN110727742A (zh) * | 2019-10-12 | 2020-01-24 | 深圳市康必达控制技术有限公司 | 一种可跨端部署的业务编排方法及系统 |
CN110737858A (zh) * | 2019-10-16 | 2020-01-31 | 紫光云技术有限公司 | 一种跨平台页面显示方法 |
CN111124397B (zh) * | 2019-12-10 | 2023-03-14 | 西安智周深鉴信息科技集团有限公司 | 控制逻辑的复用方法、装置、计算机设备和存储介质 |
CN111124397A (zh) * | 2019-12-10 | 2020-05-08 | 北京慧虹远航科技有限公司 | 控制逻辑的复用方法、装置、计算机设备和存储介质 |
CN111679828A (zh) * | 2020-05-25 | 2020-09-18 | 泰康保险集团股份有限公司 | 一种数据处理的方法及装置、电子设备、存储介质 |
CN111679828B (zh) * | 2020-05-25 | 2023-08-15 | 泰康保险集团股份有限公司 | 一种数据处理的方法及装置、电子设备、存储介质 |
CN112035117A (zh) * | 2020-08-27 | 2020-12-04 | 北京三快在线科技有限公司 | 页面展示系统、方法及装置 |
CN112114777A (zh) * | 2020-09-09 | 2020-12-22 | 深圳市紫金支点技术股份有限公司 | 一种atmc应用软件开发方法、智能终端、存储介质 |
CN112286500A (zh) * | 2020-09-28 | 2021-01-29 | 珠海大横琴科技发展有限公司 | 一种前端系统 |
CN112637086B (zh) * | 2020-12-11 | 2022-12-27 | 苏州浪潮智能科技有限公司 | 一种基于模块自动化编译的通信方法、系统及介质 |
CN112637086A (zh) * | 2020-12-11 | 2021-04-09 | 苏州浪潮智能科技有限公司 | 一种基于模块自动化编译的通信方法、系统及介质 |
CN113419710A (zh) * | 2021-06-25 | 2021-09-21 | 北京悟空出行科技有限公司 | 小程序的开发方法、装置、电子设备和介质 |
CN113419710B (zh) * | 2021-06-25 | 2024-03-15 | 北京悟空出行科技有限公司 | 小程序的开发方法、装置、电子设备和介质 |
CN117008896A (zh) * | 2023-09-28 | 2023-11-07 | 云粒智慧科技有限公司 | 基于地图应用的软件系统及其构建方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426492A (zh) | 一种客户端软件开发方法及装置 | |
Jazayeri | Some trends in web application development | |
Buschmann et al. | PATTERN-ORIENTED SOFTWARE ARCHITECTURE: A PATTERN LANGUAGE FOR DISTRIBUTED COMPUTING, VOLUME 4 | |
CN105787123B (zh) | 提供最小下载和模拟页面导航特征的服务器计算机和方法 | |
US20150178052A1 (en) | Automated experimentation platform | |
WO2018165254A1 (en) | Building management system development and control platform | |
EP3311267B1 (en) | Interfaces for connected software applications in automation environments | |
CN105138448A (zh) | 一种在前端测试页面的方法和装置 | |
Moraitis et al. | The Gaia2Jade process for multi-agent systems development | |
CN105739987A (zh) | 面向SOA的快速构建JavaWeb应用的系统框架 | |
Kale | Guide to cloud computing for business and technology managers: from distributed computing to cloudware applications | |
US6862732B1 (en) | Method and apparatus for event-driven processing of data | |
CN103345394A (zh) | 一种快速制作原生手机应用软件的方法 | |
Rodríguez-Echeverría et al. | Modernization of legacy web applications into rich internet applications | |
CN104010045B (zh) | 基于云平台的移动节点执行任务的方法 | |
Miao et al. | A Web 2.0‐based science gateway for massive remote sensing image processing | |
Rathod et al. | Structural and behavioral modeling of RESTful web service interface using UML | |
CN108038129A (zh) | 一种基于chromium内核的物联网浏览器方案 | |
Michael et al. | GridSphere’s grid portlets | |
Kroiß | From backend to frontend: Case study on adopting Mmcro frontends from a single page ERP application monolith | |
Ai et al. | AGV scheduling system based on MQTT protocol | |
Ortin et al. | Towards an Easily Programmable IoT Framework Based on Microservices. | |
El-Refaey et al. | Grid, soa and cloud computing: On-demand computing models | |
Li et al. | Support modules and system structure of web-enabled collaborative environment for design and manufacture | |
US20230195514A1 (en) | Uniform addressing in business process engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190305 |
|
RJ01 | Rejection of invention patent application after publication |