CN111324333B - 一种基于组件化的软件开发方法及装置 - Google Patents
一种基于组件化的软件开发方法及装置 Download PDFInfo
- Publication number
- CN111324333B CN111324333B CN201811544550.4A CN201811544550A CN111324333B CN 111324333 B CN111324333 B CN 111324333B CN 201811544550 A CN201811544550 A CN 201811544550A CN 111324333 B CN111324333 B CN 111324333B
- Authority
- CN
- China
- Prior art keywords
- component
- components
- identifier
- service
- dependency
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种基于组件化的软件开发方法及装置,属于软件开发领域,该方法包括:根据待开发软件需求构建M个组件;M个组件包括至少一个服务组件;针对每个组件,在资源目录中的配置文件中定义组件对应的注解类;注解类包括标记组件的组件标识和组件标识对应的组件服务信息;根据M个组件的组件标识,在资源目录中配置M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件;遍历M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行多组依赖关系对应的组件,以便验证多组依赖关系是否冲突。如此,该方案支持组件存在运行时依赖关系的场景,可以实现组件化解耦,提高开发与调试效率。
Description
技术领域
本申请涉及软件开发技术领域,尤其涉及一种基于组件化的软件开发方法及装置。
背景技术
随着移动互联网的发展,终端设备的软件业务越来越复杂,代码量也越来越多,软件开发团队也越来越大。采用以往官方推荐的移动端软件架构已经很难适应现在的节奏。为了便于多团队多业务并行协作开发测试,组件化架构也被各公司各团队重视起来。
现有技术中的组件化方案主要包括以下几种:第一种,通过统一资源标识符(uniform resource identifier,URI)方式注册组件以及消息分发,采用json格式传递数据。采用这种方式,各组件之间只能实现界面跳转功能,无法支持服务组件。
第二种,组件打包成apk,通过动态加载的方式进行组件的注册与数据交互。采用这种方式,动态加载的方式不利于调试,且由于该方案不被官方支持,存在很大的兼容性问题。
第三种,组件采用aar方式加载,运行期交互采用反射的方式实例化接口。采用这种方式,在软件代码被混淆的情况下,很容易出现类加载失败,不利于开发与调试,且接口有更新时,调用组件无法及时更新接口。
第四种,组件共同依赖公共模块,组件之间不存在功能依赖。采用这种方式,由于组件功能差异较大,共同依赖的代码会越来越多,导致公共模块承载的业务代码也越来越多,与组件化解耦的初衷背道而驰。
而且,上述几种方案都仅支持页面模块的组件化,不支持纯后台服务组件。对于一些需要常驻后台软件(比如,安全管控类软件)不适用;而且,不支持组件存在运行时依赖关系的场景,譬如某个业务组件依赖网络交互组件初始化之后才能运行。基于此,亟需一种基于组件化的软件开发方法,以解决现有技术中的方案无法支持服务组件、组件耦合性高、不利于开发与调试等缺陷。
发明内容
本申请实施例提供一种基于组件化的软件开发方法及装置,用以实现支持服务组件、组件化解耦、提高开发与调试效率。
第一方面,本申请实施例提供一种基于组件化的软件开发方法,包括:根据待开发软件需求构建M个组件;M个组件包括至少一个服务组件;M为大于1的整数;针对M个组件中的每个组件,在资源目录中的配置文件中定义该组件对应的注解类;注解类包括标记该组件的组件标识和组件标识对应的组件服务信息;根据M个组件的组件标识,在资源目录中配置M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件;遍历M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行多组依赖关系对应的组件。
基于该方案,一方面,由于根据待开发软件的需求构建的组件中包括服务组件,而且在配置文件中定义了注解类,可以实现待开发软件在运行时支持服务组件,而且可以提高类加载成功率;另一方面,由于配置了M个组件对应的多组依赖关系,遍历M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行多组依赖关系对应的组件,如此,该方案支持组件存在运行时依赖关系的场景,组件之间有依赖关系,组件不过多依赖于公共模块,从而可以实现组件化解耦,提高开发与调试效率。
在一种可能实现方式中,所述针对所述M个组件中的每个组件,在资源目录中的配置文件中定义所述组件对应的注解类,包括:针对所述M个组件中的每个组件,执行:在所述组件对应的配置文件中定义所述组件的组件标识;在所述组件的组件标识中注解标记组件服务;所述组件服务用于标记所述组件的功能;在所述组件服务中注解过滤器事件、组件权限和组件优先级。
在一种可能实现方式中,所述遍历所述M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行所述多组依赖关系对应的组件,包括:遍历所述M个组件中每个组件的组件标识,在所述预定义线程加载所述组件的组件标识;解析所述组件标识中的注解,得到所述组件标识对应的组件服务;解析所述组件服务中的注解,得到所述组件标识对应的过滤器事件、组件权限和组件优先级;解析所述多组依赖关系,根据所述M个组件的组件标识生成至少一个依赖树;所述依赖树包括根节点和依赖于所述根节点的一级子节点,以及依赖于N级子节点的N+1级子节点;所述N为大于等于1的整数;根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,并初始化每个组件的组件标识对应的组件服务。
在一种可能实现方式中,所述根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,所述初始化每个组件的组件标识对应的组件服务之前,还包括:在编译过程中针对每个依赖树,若确定所述依赖树中存在至少一个第一节点,则报错并停止编译;所述第一节点为所述依赖树中组件权限与其父节点的组件权限冲突的任一子节点。如此,可以在依赖树存在权限冲突时,及时停止编译,以便及时进行检错、改错等后续操作。
在一种可能实现方式中,为了灵活实现唤起组件的执行操作,该方法还包括:在所述待开发软件运行时,通过预设方式唤起所述组件的执行;所述预设方式包括事件(intent)、消息、命令或广播。
第二方面,本申请实施例提供一种基于组件化的软件开发装置,包括:
构建单元,用于根据待开发软件的需求构建M个组件;所述M个组件包括至少一个服务组件;所述M为大于1的整数;配置单元,用于针对所述M个组件中的每个组件,在资源目录中的配置文件中定义所述组件对应的注解类;所述注解类包括标记所述组件的组件标识和所述组件标识对应的组件服务信息;根据所述M个组件的组件标识,在所述资源目录中配置所述M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件;控制单元,用于遍历所述M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行所述多组依赖关系对应的组件,以便验证所述多组依赖关系是否冲突。
在一种可能实现方式中,所述配置单元,具体用于:针对所述M个组件中的每个组件,执行:在所述组件对应的配置文件中定义所述组件的组件标识;在所述组件的组件标识中注解标记组件服务;所述组件服务用于标记所述组件的功能;在所述组件服务中注解过滤器事件、组件权限和组件优先级。
在一种可能实现方式中,所述控制单元,具体用于:遍历所述M个组件中每个组件的组件标识,在所述预定义线程加载所述组件的组件标识;解析所述组件标识中的注解,得到所述组件标识对应的组件服务;解析所述组件服务中的注解,得到所述组件标识对应的过滤器事件、组件权限和组件优先级;解析所述多组依赖关系,根据所述M个组件的组件标识生成至少一个依赖树;所述依赖树包括根节点和依赖于所述根节点的一级子节点,以及依赖于N级子节点的N+1级子节点;所述N为大于等于1的整数;根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,并初始化每个组件的组件标识对应的组件服务。
在一种可能实现方式中,所述控制单元,还用于:在编译过程中针对每个依赖树,若确定所述依赖树中存在至少一个第一节点,则报错并停止编译;所述第一节点为所述依赖树中组件权限与其父节点的组件权限冲突的任一子节点。
在一种可能实现方式中,所述控制单元,还用于:在所述待开发软件运行时,通过预设方式唤起所述组件的执行;所述预设方式包括事件(intent)、消息、命令或广播。
第三方面,本申请实施例还提供一种装置,包括至少一个处理单元、以及至少一个存储单元,其中,存储单元存储有计算机程序,当程序被处理单元执行时,使得处理单元执行上述任一种基于组件化的软件开发方法的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其存储有可由终端设备执行的计算机程序,当程序在终端设备上运行时,使得终端设备执行上述任一种基于组件化的软件开发方法的步骤。
附图说明
图1为本申请提供的基于组件化的软件开发的架构示意图;
图2为本申请实施方式中一种基于组件化的软件开发方法的流程示意图;
图3为本申请实施方式中组件运行方法的流程示意图;
图4为本申请实施方式中一种基于组件化的软件开发装置的结构示意图;
图5为本申请实施方式中另一种基于组件化的软件开发装置的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。方法实施例中的具体操作方法也可以应用于装置实施例或系统实施例中。
图1示例性示出了本申请实施例适用的基于组件化的软件开发的架构示意图,如图1所示,该架构包括依赖构建单元、组件标识单元、组件服务单元、组件权限单元和组件控制单元等,该架构中各单元的功能介绍如下:
依赖构建单元,用于配置组件之间的依赖关系、在编译时生成依赖配置、在运行时构建依赖树并检测依赖树中各节点之间是否存在依赖冲突。
作为一个示例,在构建依赖树时筛选出没有父节点的节点作为根节点,深度设为0,根节点的一级子节点深度加1,每一级子节点比上一级子节点的深度加1,深度值越大代表层级越深,从根节点开始往下通过递归的方式遍历,遍历完成后根据深度值进行排序,得到依赖树。
组件标识单元,用于标记组件的组件标识,通过该组件标识,项目工程可识别并定位到该组件标识对应的组件工程;可选的,组件标识可以作为组件工程名,也可以作为组件别名。
组件服务单元,用于实现组件后台服务功能并定义服务生命周期,组件服务可运行在自定义线程上,便于统一管理组件服务。
组件权限单元,用于管理组件权限,在运行期动态的根据权限配置加载所需的组件。
组件控制单元,用于加载、解析组件,并执行管理组件服务生命周期。
基于上述架构,下面结合图2介绍本申请实施例中提供的基于组件化的软件开发方法。
图2示例性示出了本申请实施例提供的一种基于组件化的软件开发方法,如图2所示,该方法包括:
步骤201,根据待开发软件需求构建M个组件;M个组件包括至少一个服务组件;M为大于1的整数;
此处,该M个组件中可以包括服务组件和非服务组件,非服务组件可以为页面模块交互的组件。
步骤202,针对M个组件中的每个组件,在资源目录中的配置文件中定义该组件对应的注解类;其中,注解类包括标记该组件的组件标识和组件标识对应的组件服务信息。
作为一个示例,定义注解类可以包括以下几种:定义注解类ATModule,标记别名alias、组件服务server;定义注解类ATIntentFilter,标记过滤器事件action;定义注解类ATPermission,标记组件权限;定义注解类ATPriority,标记组件服务优先级。
以组件A为例,组件A对应的过滤器事件用于定义可以发哪些事件可以触发该组件A的组件服务。这样就可以在需要启动组件A时,通过发送过滤器中已定义的事件来触发启动组件A。
组件A对应的组件权限用于定义该组件A运行或关闭。举个例子,比如有三个组件,每个组件A编译时定义了组件权限,其中组件A对应权限1,组件B对应权限2,组件C对应权限3,比如指定权限1和权限3对应运行,那么运行组件A和组件C。
组件A对应的组件优先级用于定义该组件A运行时的优先级,优先级越高先运行,优先级越低后运行,相同优先级可以批量操作,同时运行。
本申请实施例中,组件服务信息可以包括过滤器事件、组件权限和组件优先级中的一种或多种。
上述资源目录(Assets)可以包括有配置文件,通过配置文件定义组件标识ATApplication,可选的,在assets下创建组件标识文件,组件标识文件以实现类命名。
步骤203,根据M个组件的组件标识,在资源目录中配置M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件。
上述资源目录(Assets)可以包括有配置文件,还可以包括多组依赖关系,其中,依赖关系是各个组件的组件标识之间的映射关系。
作为一个示例,比如一个应用,有3个组件,组件A、组件B、组件C,其中组件B依赖于组件A、组件C依赖于组件A,那么这个应用包括一组依赖关系。
作为另一个示例,比如一个应用,有5个组件,组件A、组件B、组件C、组件D、组件E,其中组件B依赖于组件A、组件C依赖于组件A,组件D依赖于组件E,那么这个应用包括两组依赖关系。
步骤204,遍历M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行多组依赖关系对应的组件。
基于该方案,一方面,由于根据待开发软件的需求构建的组件中包括服务组件,而且在配置文件中定义了注解类,可以实现待开发软件在运行时支持服务组件,而且可以提高类加载成功率;另一方面,由于配置了M个组件对应的多组依赖关系,遍历M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行多组依赖关系对应的组件,如此,该方案支持组件存在运行时依赖关系的场景,组件之间有依赖关系,组件不过多依赖于公共模块,从而可以实现组件化解耦,提高开发与调试效率。
在一种可能实现方式中,上述步骤202可以通过以下实现方式实现:针对M个组件中的每个组件,执行:在该组件对应的配置文件中定义该组件的组件标识(ATApplication);在该组件的组件标识中注解标记组件服务(ATServer);其中,组件服务中实现生命周期方法,比如onCreate、onDestroy、onStartCommand。该组件服务用于标记该组件的功能;在该组件服务中注解过滤器事件、组件权限和组件优先级。
本申请实施例中,上述步骤204可以通过以下实施例实现,参见图3所示的组件运行方法,该方法包括以下步骤:
步骤301,遍历M个组件中每个组件的组件标识,在预定义线程加载组件的组件标识;
步骤302,解析组件标识中的注解,得到组件标识对应的组件服务;
步骤303,解析组件服务中的注解,得到组件标识对应的过滤器事件、组件权限和组件优先级;
步骤304,解析多组依赖关系,根据M个组件的组件标识生成至少一个依赖树;依赖树包括根节点和依赖于根节点的一级子节点,以及依赖于N级子节点的N+1级子节点;N为大于等于1的整数;
作为一个示例,比如一个应用,有3个组件,组件A、组件B、组件C,其中组件B依赖于组件A、组件C依赖于组件A,那么这个应用包括一组依赖关系。组件A、组件B、组件C可以构件一个依赖树,其中组件A为根节点,组件B和组件C为组件A的一级子节点。
作为另一个示例,比如一个应用,有5个组件,组件A、组件B、组件C、组件D、组件E,其中组件C依赖于组件B,组件B依赖于组件A,组件D依赖于组件E,那么这个应用包括两组依赖关系。组件A、组件B、组件C、组件D、组件E可以构建两个依赖树,其中一颗依赖树中,组件A为根节点,组件B为一级子节点,组件C为二级子节点;另一颗依赖树中,组件E为根节点,组件D为一级子节点。
步骤305,根据组件的组件标识对应的组件权限和组件优先级,从依赖树的根节点开始遍历每个组件的组件标识,并初始化每个组件的组件标识对应的组件服务。
在一种可能实现方式中,在步骤304之后,在步骤305之前,还可以包括步骤306。
步骤306,在编译过程中针对每个依赖树,根据组件权限验证该依赖树的组件权限是否冲突;若是,则继续步骤307;若否,则继续上述步骤305。
步骤307,报错并停止编译。
通过上述图3可以看出,该实施例支持运行时依赖树构建与冲突检测,可以提高开发和调试效率。
一种可能的实现方式中,若确定所述依赖树中存在至少一个第一节点,则报错并停止编译;该第一节点为所述依赖树中组件权限与其父节点的组件权限冲突的任一子节点。如此,可以在依赖树存在权限冲突时,及时停止编译,以便及时进行检错、改错等后续操作。
作为一个示例,以依赖树包括组件E、组件F和组件D为例,组件E为根节点,组件D和组件F均为一级子节点。如果组件D有启动权限,而组件E没有启动权限,在编译过程中就会存在权限冲突,进行报错并停止工程编译。
基于上述任一实施例,进一步,在软件运行时,组件控制单元保存传入的运行线程(线程loop),读取资源目录(Assets)下的组件标识列表,定位到组件标识对应的组件服务,然后加载该组件服务的实现类。
作为一种可选的实现方式,在软件运行时,可以根据接收的指定组件权限,来确定哪些组件有运行的权限,根据指定事件来确定需要启动的组件,根据组件优先权来确定需要启动的组件的执行顺序。
现有技术中加载软件中的某个服务组件时,需要在网络初始化之后,由用户触发启动后台服务组件,比如在登陆软件之后,需要人为触发初始化联系人名单等。为了简化操作以实现自动更新联系人名单,在该软件开发时,通过配置软件的各个组件之间的依赖关系、组件服务信息来使得登陆组件启动之后,可以在联系人组件对应的组件服务中注解登陆组件启动作为过滤器事件,从而实现在登陆之后自动触发启动联系人组件。
在一种可能实现方式中,在所述待开发软件运行时,通过预设方式唤起所述组件的执行;所述预设方式包括事件(intent)、消息、命令或广播。
基于相同构思,图4示例性示出了本申请实施例提供的一种基于组件化的软件开发装置的结构示意图,如图4所示,该装置400可以用于执行上述图2或图3所示的任一个方案。该装置400包括构建单元401、配置单元402和控制单元403。
构建单元401,用于根据待开发软件的需求构建M个组件;所述M个组件包括至少一个服务组件;所述M为大于1的整数;
配置单元402,用于针对所述M个组件中的每个组件,在资源目录中的配置文件中定义所述组件对应的注解类;所述注解类包括标记所述组件的组件标识和所述组件标识对应的组件服务信息;根据所述M个组件的组件标识,在所述资源目录中配置所述M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件;
控制单元403,用于遍历所述M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行所述多组依赖关系对应的组件,以便验证所述多组依赖关系是否冲突。
在一种可能实现方式中,所述配置单元402,具体用于:针对所述M个组件中的每个组件,执行:在所述组件对应的配置文件中定义所述组件的组件标识;在所述组件的组件标识中注解标记组件服务;所述组件服务用于标记所述组件的功能;在所述组件服务中注解过滤器事件、组件权限和组件优先级。
在一种可能实现方式中,所述控制单元403,具体用于:遍历所述M个组件中每个组件的组件标识,在所述预定义线程加载所述组件的组件标识;解析所述组件标识中的注解,得到所述组件标识对应的组件服务;解析所述组件服务中的注解,得到所述组件标识对应的过滤器事件、组件权限和组件优先级;解析所述多组依赖关系,根据所述M个组件的组件标识生成至少一个依赖树;所述依赖树包括根节点和依赖于所述根节点的一级子节点,以及依赖于N级子节点的N+1级子节点;所述N为大于等于1的整数;根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,并初始化每个组件的组件标识对应的组件服务。
在一种可能实现方式中,所述控制单元403,还用于:在编译过程中针对每个依赖树,若确定所述依赖树中存在至少一个第一节点,则报错并停止编译;所述第一节点为所述依赖树中组件权限与其父节点的组件权限冲突的任一子节点。
在一种可能实现方式中,其特征在于,所述控制单元403,还用于:在所述待开发软件运行时,通过预设方式唤起所述组件的执行;所述预设方式包括事件(intent)、消息、命令或广播。
应理解,以上各个模块的划分仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。本申请实施例中,构建单元401、配置单元402和控制单元403可以集成在一个处理单元中,构建单元401、配置单元402和控制单元403的功能也可以由下述图5中的处理器502实现。
基于相同构思,本申请实施例还提供一种装置,包括至少一个处理单元、以及至少一个存储单元,其中,存储单元存储有计算机程序,当程序被处理单元执行时,使得处理单元执行上述任一种基于组件化的软件开发方法的步骤。该存储单元可以是下图5中的存储器501,该处理单元可以是下图5中的处理器502。
图5示例性示出了本申请实施例提供的一种装置的结构示意图,如图5所示,装置500可以用于执行上述图2或图3所示的任一个步骤。该装置500包括存储器501和处理器502。
存储器501可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器501还可以包括上述种类的存储器的组合。
处理器502可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。处理器502还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。可选的,上述存储器501和处理器502也可以集成在一起。
其中,当存储器501中存储的计算机程序被所述处理器502执行时,使得该处理器502可以执行上述图2或图3中的各个步骤。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现、当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述指令可以存储在计算机存储介质中,或者从一个计算机存储介质向另一个计算机存储介质传输,例如,所述指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带、磁光盘(MO)等)、光介质(例如,CD、DVD、BD、HVD等)、或者半导体介质(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(Solid State Disk,SSD))等。
本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (8)
1.一种基于组件化的软件开发方法,其特征在于,包括:
根据待开发软件需求构建M个组件;所述M个组件包括至少一个服务组件;所述M为大于1的整数;
针对所述M个组件中的每个组件,在资源目录中的配置文件中定义所述组件对应的注解类;所述注解类包括标记所述组件的组件标识和所述组件标识对应的组件服务信息;
根据所述M个组件的组件标识,在所述资源目录中配置所述M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件;
遍历所述M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行所述多组依赖关系对应的组件;
其中,所述遍历所述M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行所述多组依赖关系对应的组件,包括:
遍历所述M个组件中每个组件的组件标识,在所述预定义线程加载所述组件的组件标识;
解析所述组件标识中的注解,得到所述组件标识对应的组件服务;
解析所述组件服务中的注解,得到所述组件标识对应的过滤器事件、组件权限和组件优先级;
解析所述多组依赖关系,根据所述M个组件的组件标识生成至少一个依赖树;所述依赖树包括根节点和依赖于所述根节点的一级子节点,以及依赖于N级子节点的N+1级子节点;所述N为大于等于1的整数;
根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,并初始化每个组件的组件标识对应的组件服务。
2.如权利要求1所述的方法,其特征在于,所述针对所述M个组件中的每个组件,在资源目录中的配置文件中定义所述组件对应的注解类,包括:
针对所述M个组件中的每个组件,执行:
在所述组件对应的配置文件中定义所述组件的组件标识;
在所述组件的组件标识中注解标记组件服务;所述组件服务用于标记所述组件的功能;
在所述组件服务中注解过滤器事件、组件权限和组件优先级。
3.如权利要求1所述的方法,其特征在于,所述根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,所述初始化每个组件的组件标识对应的组件服务之前,还包括:
在编译过程中针对每个依赖树,若确定所述依赖树中存在至少一个第一节点,则报错并停止编译;所述第一节点为所述依赖树中组件权限与其父节点的组件权限冲突的任一子节点。
4.如权利要求1-3任一项所述的方法,其特征在于,还包括:
在所述待开发软件运行时,通过预设方式唤起所述组件的执行;所述预设方式包括事件intent、消息、命令或广播。
5.一种基于组件化的软件开发装置,其特征在于,包括:
构建单元,用于根据待开发软件的需求构建M个组件;所述M个组件包括至少一个服务组件;所述M为大于1的整数;
配置单元,用于针对所述M个组件中的每个组件,在资源目录中的配置文件中定义所述组件对应的注解类;所述注解类包括标记所述组件的组件标识和所述组件标识对应的组件服务信息;根据所述M个组件的组件标识,在所述资源目录中配置所述M个组件对应的多组依赖关系;每组依赖关系中至少存在两个有依赖关系的组件;
控制单元,用于遍历所述M个组件的组件标识,并根据每个组件的组件标识对应的组件服务信息在预定义线程运行所述多组依赖关系对应的组件,以便验证所述多组依赖关系是否冲突;
其中,所述控制单元,具体用于:
遍历所述M个组件中每个组件的组件标识,在所述预定义线程加载所述组件的组件标识;
解析所述组件标识中的注解,得到所述组件标识对应的组件服务;
解析所述组件服务中的注解,得到所述组件标识对应的过滤器事件、组件权限和组件优先级;
解析所述多组依赖关系,根据所述M个组件的组件标识生成至少一个依赖树;所述依赖树包括根节点和依赖于所述根节点的一级子节点,以及依赖于N级子节点的N+1级子节点;所述N为大于等于1的整数;
根据所述组件的组件标识对应的组件权限和组件优先级,从所述依赖树的根节点开始遍历每个组件的组件标识,并初始化每个组件的组件标识对应的组件服务。
6.如权利要求5所述的装置,其特征在于,所述配置单元,具体用于:
针对所述M个组件中的每个组件,执行:
在所述组件对应的配置文件中定义所述组件的组件标识;
在所述组件的组件标识中注解标记组件服务;所述组件服务用于标记所述组件的功能;
在所述组件服务中注解过滤器事件、组件权限和组件优先级。
7.如权利要求5所述的装置,其特征在于,所述控制单元,还用于:
在编译过程中针对每个依赖树,若确定所述依赖树中存在至少一个第一节点,则报错并停止编译;所述第一节点为所述依赖树中组件权限与其父节点的组件权限冲突的任一子节点。
8.如权利要求5-7任一项所述的装置,其特征在于,所述控制单元,还用于:
在所述待开发软件运行时,通过预设方式唤起所述组件的执行;所述预设方式包括事件intent、消息、命令或广播。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811544550.4A CN111324333B (zh) | 2018-12-17 | 2018-12-17 | 一种基于组件化的软件开发方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811544550.4A CN111324333B (zh) | 2018-12-17 | 2018-12-17 | 一种基于组件化的软件开发方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111324333A CN111324333A (zh) | 2020-06-23 |
CN111324333B true CN111324333B (zh) | 2022-08-30 |
Family
ID=71163111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811544550.4A Active CN111324333B (zh) | 2018-12-17 | 2018-12-17 | 一种基于组件化的软件开发方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111324333B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782183B (zh) * | 2020-06-29 | 2024-03-01 | 北京百度网讯科技有限公司 | 用于判断组件依赖关系的方法及设备、电子设备和介质 |
CN111967017B (zh) * | 2020-07-28 | 2023-06-02 | 深圳开源互联网安全技术有限公司 | 生成依赖关系的方法、装置、终端设备及存储介质 |
CN112416425B (zh) * | 2020-11-20 | 2023-03-24 | 微医云(杭州)控股有限公司 | App构建方法、装置、计算机设备及存储介质 |
CN112667250A (zh) * | 2020-12-23 | 2021-04-16 | 北京浪潮数据技术有限公司 | 一种centos系统的组件打包下载方法、系统及装置 |
CN112764723B (zh) * | 2021-01-21 | 2021-09-17 | 奇秦科技(北京)股份有限公司 | 一种基于Spring无侵入修改标准产品业务系统和方法 |
CN114168111B (zh) * | 2021-12-07 | 2024-04-05 | 北京五八信息技术有限公司 | 组件化路由实现方法、设备、产品及存储介质 |
CN116541105A (zh) * | 2023-07-06 | 2023-08-04 | 智慧眼科技股份有限公司 | 一种基于注解的组件加载方法、系统、终端及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103810172A (zh) * | 2012-11-06 | 2014-05-21 | 金蝶软件(中国)有限公司 | 生成组件依赖关系图的方法和装置 |
CN103885788A (zh) * | 2014-04-14 | 2014-06-25 | 焦点科技股份有限公司 | 一种基于模型组件化动态web 3d虚拟现实场景的搭建方法及系统 |
US9323644B1 (en) * | 2015-09-30 | 2016-04-26 | Semmle Limited | Query-based software dependency analysis |
CN105718289A (zh) * | 2016-01-21 | 2016-06-29 | 腾讯科技(深圳)有限公司 | 一种组件关系建立方法及其设备 |
CN105893013A (zh) * | 2015-12-07 | 2016-08-24 | 乐视云计算有限公司 | 工程构建系统及其构建方法 |
CN106339222A (zh) * | 2016-08-23 | 2017-01-18 | 联动优势电子商务有限公司 | 一种服务实现方法及装置 |
CN107291458A (zh) * | 2017-06-06 | 2017-10-24 | 北京知道创宇信息技术有限公司 | 一种Web应用的插件化构建方法、系统及服务器 |
CN107391101A (zh) * | 2017-04-21 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种信息处理方法及装置 |
CN107729106A (zh) * | 2017-10-09 | 2018-02-23 | 北京京东尚科信息技术有限公司 | 一种在应用程序组件间实现快速跳转的方法和装置 |
CN107908403A (zh) * | 2017-11-10 | 2018-04-13 | 北京搜狐新动力信息技术有限公司 | 一种移动端业务模块组件化的配置方法及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7904892B2 (en) * | 2006-01-06 | 2011-03-08 | Northrop Grumman Corporation | Systems and methods for identifying and displaying dependencies |
US8918490B1 (en) * | 2007-07-12 | 2014-12-23 | Oracle America Inc. | Locality and time based dependency relationships in clusters |
WO2015195676A2 (en) * | 2014-06-16 | 2015-12-23 | Silverthread, Inc. | Computer-implemented tools and methods for extracting information about the structure of a large computer software system, exploring its structure, discovering problems in its design, and enabling refactoring |
US9870207B2 (en) * | 2015-12-22 | 2018-01-16 | Sap Se | Software development using re-usable software components |
-
2018
- 2018-12-17 CN CN201811544550.4A patent/CN111324333B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103810172A (zh) * | 2012-11-06 | 2014-05-21 | 金蝶软件(中国)有限公司 | 生成组件依赖关系图的方法和装置 |
CN103885788A (zh) * | 2014-04-14 | 2014-06-25 | 焦点科技股份有限公司 | 一种基于模型组件化动态web 3d虚拟现实场景的搭建方法及系统 |
US9323644B1 (en) * | 2015-09-30 | 2016-04-26 | Semmle Limited | Query-based software dependency analysis |
CN105893013A (zh) * | 2015-12-07 | 2016-08-24 | 乐视云计算有限公司 | 工程构建系统及其构建方法 |
CN105718289A (zh) * | 2016-01-21 | 2016-06-29 | 腾讯科技(深圳)有限公司 | 一种组件关系建立方法及其设备 |
CN106339222A (zh) * | 2016-08-23 | 2017-01-18 | 联动优势电子商务有限公司 | 一种服务实现方法及装置 |
CN107391101A (zh) * | 2017-04-21 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种信息处理方法及装置 |
CN107291458A (zh) * | 2017-06-06 | 2017-10-24 | 北京知道创宇信息技术有限公司 | 一种Web应用的插件化构建方法、系统及服务器 |
CN107729106A (zh) * | 2017-10-09 | 2018-02-23 | 北京京东尚科信息技术有限公司 | 一种在应用程序组件间实现快速跳转的方法和装置 |
CN107908403A (zh) * | 2017-11-10 | 2018-04-13 | 北京搜狐新动力信息技术有限公司 | 一种移动端业务模块组件化的配置方法及系统 |
Non-Patent Citations (5)
Title |
---|
An empirical study of the robustness of Inter-component Communication in Android;Amiya K. Maji等;《https://ieeexplore.ieee.org/abstract/document/6263963》;20120628;全文第1-12页 * |
ARouter;alibaba;《https://github.com/alibaba/ARouter/blob/1bdd1b586c4123b51505477b2c247e4051f2e041/README_CN.md》;20181214;全文第1-14页 * |
安卓组件化架构实践;Huangyong_csdn;《https://blog.csdn.net/huang_yong_/article/details/70141210》;20170412;全文第1-10页 * |
电信运营商单体架构到微服务架构转型设计思路;董昭;《通信世界》;20170915(第25期);第58-59页 * |
组件化框架调研和思考;North_2016;《https://www.jianshu.com/p/0d45f2a894ba》;20180227;全文第1-10页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111324333A (zh) | 2020-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111324333B (zh) | 一种基于组件化的软件开发方法及装置 | |
US9354865B2 (en) | System and method for controlling the development of a software application | |
KR102663126B1 (ko) | 멀티테넌트 어플리케이션 서버 환경에서 복수의 파티션 편집 세션들을 지원하는 시스템 및 방법 | |
EP2334024B1 (en) | Method and device for terminal management based on right control | |
CN109032825B (zh) | 一种故障注入方法、装置及设备 | |
CN107005426B (zh) | 一种虚拟网络功能的生命周期管理方法及装置 | |
TW200839614A (en) | Universal schema for representing management policy | |
US11748245B2 (en) | Object-oriented regression-candidate filter | |
CN110764775A (zh) | 一种应用程序整合的方法、装置、存储介质和服务器 | |
US10148486B2 (en) | Object version management | |
WO2023273994A1 (zh) | 智能合约执行的方法、系统、装置和存储介质 | |
CN111694612A (zh) | 配置检查方法、装置、计算机系统及存储介质 | |
US7340725B1 (en) | Smart test attributes and test case scenario in object oriented programming environment | |
CN115080060A (zh) | 应用程序发布方法、装置、设备、存储介质和程序产品 | |
CN111857860A (zh) | 一种安全加载插件的实现方法及系统 | |
US20200278874A1 (en) | Online Reconfiguration Of A Node In A Process Control System | |
US10868719B2 (en) | System and method for federated configuration in an application server environment | |
US11281448B2 (en) | Online firmware upgrade of a node in a process control system | |
CN111813836A (zh) | 一种提高Ethereum区块链系统扩展性的方法 | |
CN105447040A (zh) | 二进制文件管理、更新方法、装置以及系统 | |
CN112416612A (zh) | 服务调用方法、装置、计算机设备和可读存储介质 | |
CN116599881A (zh) | 云平台租户建模测试的方法、装置、设备及存储介质 | |
CN113608831B (zh) | 一种插件实例管理方法、系统、存储介质及设备 | |
US9298432B1 (en) | Systems and methods for performing hooking in a jitted environment | |
CN113515288B (zh) | 基于发布单元的自动化部署方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |