CN102393817A - 一种通过配置在运行时动态创建对象实例方法 - Google Patents
一种通过配置在运行时动态创建对象实例方法 Download PDFInfo
- Publication number
- CN102393817A CN102393817A CN2011101757975A CN201110175797A CN102393817A CN 102393817 A CN102393817 A CN 102393817A CN 2011101757975 A CN2011101757975 A CN 2011101757975A CN 201110175797 A CN201110175797 A CN 201110175797A CN 102393817 A CN102393817 A CN 102393817A
- Authority
- CN
- China
- Prior art keywords
- information
- instance
- object instance
- configuration
- dynamic creation
- 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
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种通过配置在运行时动态创建对象实例方法,属于计算机技术领域。该方法包括:生成控制反转容器,并能通过DLL创建实例;读取配置文件信息,并能根据配置信息加载对象;敏捷实现接口编程;实现面向接口编程与创建对象的融合;当程序执行时,能够通过配置文件配置对象信息创建对象实例。与现有技术相比,本发明方法解决了程序运行时扩展及编程复杂度问题,并提高了编程的效率,可广泛地应用于设计计算机软件C#对象实例创建过程。
Description
技术领域
本发明涉及一种计算机技术,具体地说是一种通过配置在运行时动态创建对象实例方法。
背景技术
目前企业级应用系统大多采用三层或者多层应用模式。而大多数企业级应用系统都选择了面向对象的编程技术。所谓“对象”就是一个或一组数据以及处理这些数据的方法和过程的集合。对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象。而为了方便开发、部署、运行和管理基于多层架构的应用,需要依据不同语言的特性构建一个完整的应用框架。而对象的实现以及实例化就是这个框架中必不可少的部分。面向对象编程原则中有一条非常重要的原则就是面向接口编程而不面向其他什么编程。
当前对象的实例化往往是在程序需要某个对象时创建对象实例,在不同的地方多次创建不同对象实例。并且是在程序编译时创建的,这样就导致系统在运行阶段如果需要扩展功能,就必须重新编译系统添加扩展的内容。并且对于接口编程的实现往往需要在创建接口时针对某以实现创建接口。比如接口IA通过A类实现,那么在创建接口时就要通过A实现。而当我们发现接口IA提供的业务实现发生很大变化时,我们需要替换IA实现类A为B类。当前编程实现往往需要重新查找这些实现并替换为B。很显然以上对象实例的实现以及接口编程方法大大限制了程序的扩展功能,增大了编程复杂度,降低了开发效率。
因此本领域技术人员迫切需要发展一种高效的、易于扩展的对象实例创建及接口编程方法,减少编程的复杂度提高开发效率。
发明内容
本发明的技术任务是针对上述现有技术的不足,提供一种通过配置在运行时动态创建对象实例方法。该方法解决了程序运行时扩展及编程复杂度问题,并提高了编程的效率。
本发明以控制反转(IOC)容器保证上述方法的实现与应用。
本发明的技术任务是按以下方式实现的:一种通过配置在运行时动态创建对象实例方法,包括:
生成控制反转容器,并能通过DLL创建实例;
读取配置文件信息,并能根据配置信息加载对象;
敏捷实现接口编程;
实现面向接口编程与创建对象的融合;
当程序执行时,能够通过配置文件配置对象信息创建对象实例。
所述控制反转(IOC)容器通过反射、泛型技术实现。
所述配置文件信息配置了实体对象、业务对象、数据访问对象程序集信息。
配置文件信息中明确了业务对象所包含的数据对象,亦即实现业务对象所需要的数据对象支持。
通过调用不同的创建方法,创建不同的对象实例,如果是DAO(数据逻辑对象)则创建数据对象实例;如果是SERVICE(业务逻辑)则创建业务对象实例,并判断该业务逻辑对应的数据对象创建数据对象实例。
在运行时读取配置文件信息,并读取程序集信息,动态创建对象实例。
与现有技术相比,本发明通过改变以往创建实例的方法,即通过配置文件配置出实体、业务、数据对象以及各对象之间的关系,通过反射、泛型等先进技术实现IOC容器,进而在系统运行时创建所需的对象实例,并切只创建一次数据对象实例,从而减少了创建对象实例的次数,节省了内存;并为系统扩展提供了运行时扩展的方法,以及统一了创建实例的方式;提高了编程效率;统一了接口实现,降低了面向接口编程的复杂度。具体地说,本发明方法具有以下突出的有益效果:
1、 通过IOC容器统一了接口实现的方式,降低了面向接口编程的复杂度;
2、 统一了对象实例创建、动态创建的方法;
3、 对实体类、业务逻辑类、数据处理类分别处理;
4、 提供系统扩展便利方式;
5、 将创建对象实例与接编程融合在一起,对象实例创建、接口编程实现方式唯一并统一;
6、 通过配置信息明确各程序集之间的关联关系;
7、 本技术实现简单,无特殊保密算法;调用实现简单易用;降低了编程的复杂度,进而提高了编程的效率。
附图说明
附图1是本发明通过配置在运行时动态创建对象实例方法的实现框架结构图;
附图2是使用本发明方法的一个调用实现流程图。
具体实施方式
参照说明书附图以具体实施例对本发明的通过配置在运行时动态创建对象实例方法作以下详细地说明。
本发明方法适用于C#程序的对象实例创建及面向接口编程实现。其具体实现方式如附图1所示。
图1所示的是一个标准的三层架构的实现。
业务实体、业务逻辑层、数据逻辑层都对应一个相应的接口。
每个需要创建对象的需求体通过IOC容器创建接口对象。
实例的具体创建由IOC容器实现。具体实现通过反射技术实现控制反转,通过对象属性信息动态创建需要的对象实例。
IOC容器创建什么实例、实例对应的命名空间及对应的DLL信息是通过配置文件信息中的name值,也就是接口类名称,读取接口实现对象的信息。然后根据具体实现对象创建接口。
1、配置文件具体信息如下:
//数据逻辑对象信息定义
<daos>
<Dao name="ITestIOCPersistence"
type="Genersoft.GS.JGHYB.ZCGL.Persistence.TestIOCPersistence, Genersoft.GS.JGHYB.ZCGL.Persistence">
</Dao>
</daos>
//业务逻辑对象信息定义
<service name="ITestIOCLogic"
type="Genersoft.GS.JGHYB.ZCGL.BusinessLogic.TestIOCLogic,Genersoft.GS.JGHYB.ZCGL.BusinessLogic" IsShared="true">
<property name="TestIOCPersistence">
<dao>ITestIOCPersistence</dao>
</property>
</service>
//业务实体对象信息定义
<modules>
<module name="ITestSPI"
type="Genersoft.GS.JGHYB.ZCGL.SPI.TestSPI,Genersoft.GS.JGHYB.ZCGL.SPI">
</module>
</modules>
2、创建对象实例实现:
1) 业务实体对象实例创建
/// <summary>
/// 指定类型生成新的业务实体对象
/// </summary>
/// <typeparam name="T">业务实体的类型</typeparam>
/// <returns>新的业务实体对象</returns>
//传入的实体对象名称是否为配置文件中的对象
if (moduleDynamicMethods.ContainsKey(moduleName))
{
//取得对象信息
object module = moduleDynamicMethods[moduleName]();
//根据对象属性创建对象信息
PropertyInfo pi = GetPropertyInfo(obj.GetType(), propertyName);
(T)module=pi.GetValue(obj, null);
}
return default(T);
2) 业务逻辑对象实例创建
Type serviceType = Type.GetType(typeName);
//通过反射动态创建类的实例
IService service = (IService)Activator.CreateInstance(serviceType);
//以下代码创建关联的数据逻辑对象
XmlNodeList list2 = node.SelectNodes("property");
foreach (XmlNode node2 in list2)
{
string name = node2.Attributes.GetNamedItem("name").Value;
object value = GetPropertyValue(node2);
//通过反射创建关联类的实例,并设置共用属性
ReflectUtil.SetPropertyValue(service, name, value);
}
return service;
3) 数据逻辑对象实例创建
Dictionary<string, object> daoInstances = new Dictionary<string,object>();
//配置信息中存在daos配置项
if (node != null)
{
//取得数据对象配置信息列表
XmlNodeList list = node.SelectNodes("Dao");
//循环列表信息并创建相应的数据对象实例,并添加到dictionary结构中
foreach (XmlNode daoNode in list)
{
string typeName = daoNode.Attributes.GetNamedItem("type").Value;
//读取TYPE信息
Type type = Type.GetType(typeName);
//通过反射创建实例
object daoInstance = Activator.CreateInstance(type);
//添加实例
daoInstances.Add(daoNode.Attributes.GetNamedItem("name").Value, daoInstance);
}
}
return daoInstances;
4) 配置文件读取
//取得系统运行路径
string args = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
XmlDocument xmlDoc = new XmlDocument();
//加载配置文件
xmlDoc.Load(args + "JghybConfig/Jghyb.Config");
//读取所有节点
XmlNodeList nodeList =
xmlDoc.SelectSingleNode("configuration/opp.config").ChildNodes;
//取得opp.config节点信息
XmlNode webfxNode = xmlDoc.SelectSingleNode("configuration/opp.config");
3、具体实施步骤如图2所示
1、 在使用本方法时首先要定义系统的配置文件信息,将实体类、业务逻辑对象、数据逻辑对象的接口及实现对象信息在配置文件的不同节点中进行配置。
具体为:
Daos 配置数据逻辑对象 dao为具体某一个数据逻辑对象。
Service配置业务逻辑对象 property是需要调用的数据逻辑对象实例名,dao是daos中配置的对应的dao结name。
Modules 配置业务实体对象 module为具体某一个业务实体对象信息。
2、 如果业务逻辑对象调用了数据逻辑对象,则需要配置property节点。
3、 配置文件信息配置完成后,在需要创建对象实例的项目中引入该方法的实现数据包-DLL
4、 创建具体的对象对应的类以及接口
在需要创建对象实例的地方调用该方法的GeModule、GetService、GetDao方法分别创建实体类实例、业务逻辑实例、数据逻辑实例。
Claims (6)
1.一种通过配置在运行时动态创建对象实例方法,其特征在于:所述方法包括:
生成控制反转容器,并能通过DLL创建实例;
读取配置文件信息,并能根据配置信息加载对象;
敏捷实现接口编程;
实现面向接口编程与创建对象的融合;
当程序执行时,能够通过配置文件配置对象信息创建对象实例。
2.根据权利要求1所述的通过配置在运行时动态创建对象实例方法,其特征在于:通过反射、泛型技术实现控制反转容器。
3.根据权利要求1所述的通过配置在运行时动态创建对象实例方法,其特征在于:配置文件信息配置了实体对象、业务对象、数据访问对象程序集信息。
4.根据权利要求3所述的通过配置在运行时动态创建对象实例方法,其特征在于:配置文件信息中明确了业务对象所包含的数据对象,亦即实现业务对象所需要的数据对象支持。
5.根据权利要求4所述的通过配置在运行时动态创建对象实例方法,其特征在于:通过调用不同的创建方法,创建不同的对象实例,
如果是实体类则创建实体对象实例;如果是数据逻辑对象则创建数据对象实例;如果是业务逻辑则创建业务对象实例,并判断该业务逻辑对应的数据对象创建数据对象实例。
6.根据权利要求1所述的通过配置在运行时动态创建对象实例方法,其特征在于:在运行时读取配置文件信息,并读取程序集信息,动态创建对象实例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101757975A CN102393817A (zh) | 2011-06-28 | 2011-06-28 | 一种通过配置在运行时动态创建对象实例方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101757975A CN102393817A (zh) | 2011-06-28 | 2011-06-28 | 一种通过配置在运行时动态创建对象实例方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102393817A true CN102393817A (zh) | 2012-03-28 |
Family
ID=45861146
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011101757975A Pending CN102393817A (zh) | 2011-06-28 | 2011-06-28 | 一种通过配置在运行时动态创建对象实例方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102393817A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142833A (zh) * | 2013-05-06 | 2014-11-12 | 沈阳中科博微自动化技术有限公司 | 封装测试生产线的设备动态管理方法 |
CN104168250A (zh) * | 2013-05-15 | 2014-11-26 | 腾讯科技(深圳)有限公司 | 基于cgi框架的业务流程控制方法及装置 |
CN107168993A (zh) * | 2017-03-29 | 2017-09-15 | 广州优视网络科技有限公司 | 处理响应数据的方法、设备、客户端设备和电子设备 |
CN111522535A (zh) * | 2020-03-26 | 2020-08-11 | 杭州数跑科技有限公司 | 数据源聚合方法、装置、存储介质及计算机设备 |
CN112114778A (zh) * | 2020-07-03 | 2020-12-22 | 上海金融期货信息技术有限公司 | 一种支持水平扩展的跨平台动态库算法管理系统 |
CN113885873A (zh) * | 2021-09-29 | 2022-01-04 | 中国科学院软件研究所 | 轻量级OpenHarmony操作系统应用开发对象管理系统及其应用方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1744037A (zh) * | 2005-08-26 | 2006-03-08 | 南京邮电大学 | 避免网格计算应用依赖底层开发工具箱的方法 |
CN101996071A (zh) * | 2009-08-20 | 2011-03-30 | 上海杉达学院 | 一种信息控制系统的软件架构及构建方法 |
-
2011
- 2011-06-28 CN CN2011101757975A patent/CN102393817A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1744037A (zh) * | 2005-08-26 | 2006-03-08 | 南京邮电大学 | 避免网格计算应用依赖底层开发工具箱的方法 |
CN101996071A (zh) * | 2009-08-20 | 2011-03-30 | 上海杉达学院 | 一种信息控制系统的软件架构及构建方法 |
Non-Patent Citations (3)
Title |
---|
仲红艳: "控制反转技术分析", 《计算机技术与发展》 * |
吴刚等: "控制反转模式及其应用", 《计算机技术与发展》 * |
郝雯等: "一种三层结构软件框架扩展点实现方法", 《中国科技论文在线》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142833A (zh) * | 2013-05-06 | 2014-11-12 | 沈阳中科博微自动化技术有限公司 | 封装测试生产线的设备动态管理方法 |
CN104168250A (zh) * | 2013-05-15 | 2014-11-26 | 腾讯科技(深圳)有限公司 | 基于cgi框架的业务流程控制方法及装置 |
CN104168250B (zh) * | 2013-05-15 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 基于cgi框架的业务流程控制方法及装置 |
CN107168993A (zh) * | 2017-03-29 | 2017-09-15 | 广州优视网络科技有限公司 | 处理响应数据的方法、设备、客户端设备和电子设备 |
CN111522535A (zh) * | 2020-03-26 | 2020-08-11 | 杭州数跑科技有限公司 | 数据源聚合方法、装置、存储介质及计算机设备 |
CN112114778A (zh) * | 2020-07-03 | 2020-12-22 | 上海金融期货信息技术有限公司 | 一种支持水平扩展的跨平台动态库算法管理系统 |
CN112114778B (zh) * | 2020-07-03 | 2024-04-02 | 上海金融期货信息技术有限公司 | 一种支持水平扩展的跨平台动态库算法管理系统 |
CN113885873A (zh) * | 2021-09-29 | 2022-01-04 | 中国科学院软件研究所 | 轻量级OpenHarmony操作系统应用开发对象管理系统及其应用方法 |
CN113885873B (zh) * | 2021-09-29 | 2022-09-16 | 中国科学院软件研究所 | 轻量级OpenHarmony操作系统应用开发对象管理系统及其应用方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102393817A (zh) | 一种通过配置在运行时动态创建对象实例方法 | |
US20030200533A1 (en) | Method and apparatus for creating software objects | |
Katasonov et al. | Towards ontology-driven development of applications for smart environments | |
EP1875376A2 (en) | Xml application framework | |
JP2006107481A (ja) | 設計時および実行時にワークフローを継ぎ目なくオーサリングし編集するためのフレームワーク | |
JP2006107474A (ja) | 拡張可能ワークフローモデルの宣言的表現 | |
CN104317591A (zh) | 一种基于OSGi的web界面框架系统及web业务处理方法 | |
US20030088857A1 (en) | Method for facilitating application development | |
CN103744647A (zh) | 一种基于工作流GPD的Java工作流开发系统及其方法 | |
EP1872554A1 (en) | System and method for creating a mapping document for binding messages between an application and an associated backend server | |
US20080229274A1 (en) | Automating Construction of a Data-Source Interface For Component Applications | |
CN113094028A (zh) | 一种Windows桌面程序开发框架、方法及相关组件 | |
CN103473034A (zh) | 一种动态发布Web 服务的方法和装置 | |
CN101944017A (zh) | 一种Widget的制作方法及其制作装置 | |
Barros et al. | Processes, roles, and events: UML concepts for enterprise architecture | |
Costa et al. | The application of UML and an open distributed process framework to information system design | |
CN108334374A (zh) | 组件动态加载与执行的方法和装置 | |
CN101246421A (zh) | 一种基于工作流引擎实现的通用框架 | |
Ahmad et al. | Web service execution model for cloud environment | |
WO2022240398A1 (en) | System and method for adapting a reconfigurable runtime system used in automation systems | |
CN113204409A (zh) | 一种基于s2ml的安全攸关系统建模方法 | |
CN110968335A (zh) | 一种用于电力业务系统资源统筹管理的组件系统 | |
Mechitov et al. | Architecture design principles to support adaptive service orchestration in WSN applications | |
CN113050979B (zh) | 安装操作系统的装机配置方法及装置,安装方法及装置 | |
Horbach | Implications of interoperability for factory planning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120328 |