基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 对象控制反转

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

     控制反转,即IOC(Inversion of Control),也叫反转模式,也称依赖注入DI(Dependency Injection)模式,关于此概念的解释我在此文不做过讲说明。

     对于设计模式类的东西,我也没有认真系统的去研究过那X类N种设计模式,无论何种设计模式,都用于解决一个问题,那就是解决对象之间的耦合关系,即解耦。

     AgileEAS.NET在最初版本最不包含IOC容器,更多应用抽象工厂之类的设计模式,在这AgileEAS.NET大概第二个版本,加入了一个轻量级(微量级)的IOC容器,也许实现的并不优雅,在多年的应用中慢慢完善。

      以下我列举一个 AgileEAS.NET平台IOC容器的一个应用场景,在某个产品开发中,有的产品使用ORACLE数据库、有的客户使用SQLServer数据库,这就要求我们必须做到产品同时支持两种数据库,我们在开发中对数据DAL采用其他接口驱动的设计,即定义三个项目:DAL接口、DAL的SQLServer实现、DAL的ORACLE实现,假定三个项目名称为Exam.DAL.Interface、Exam.DAL.SQLServer、Exam.DAL.Oracle;我们在Exam.DAL.Interface中定义N个业务对象接口和一个管理这些业务对象接口的IDALManager接口:

    public interface IDALManager
    {
        IIteminfo CreateIteminfo();

        IIteminfoList CreateIteminfoList();

        IProduct CreateProduct();

        IProductList CreateProductList();
    }
 
    我们在Exam.DAL.SQLServer、Exam.DAL.Oracle中分别实现业务接口和IDALManager接口:
    public class DALManager : IDALManager
    {
         public IIteminfo CreateIteminfo()
        {
            return new Iteminfo();
        }

        public IIteminfoList CreateIteminfoList()
        {
            return new IteminfoList();
        }

        public IProduct CreateProduct()
        {
            return new Product();
        }

        public IProductList CreateProductList()
        {
            return new ProductList();
        }
    }

      我们力争在设计中使用接口驱动并且使用具体被调用者在运行期确认,当然在这样的应用场景中除了IOC容器之外可以用其他模式进行实现,我在此不做说明。

    我们在Exam.DAL.Interface增加一个公共类DALHelper并做如下定义:

    public class DALHelper
    {
        public DALHelper()
        {
        }

        public static IDALManager DALManager
        {
            get
            {
                return ContextHelper.GetContext().Container.GetComponentInstance("EAS.Exam.DAL") as IDALManager;
            }
        }
    }

    修改系统配件文件中的IOC定义:

<object name="EAS.Exam.DAL" assembly="EAS.Exam.DAL.SQLServer" type="EAS.Exam.DAL.SQLServer.DALManager" LifestyleType="Singleton" />

     这样我们就完成了对IDALManager与具体实例化对象完成了结偶,当然上例只是一个很简单的例子,AgileEAS.NET中的IOC实现了构造注入和属性注入,以下配置示例:

    <object name="MasterDbConnection" assembly="EAS.Data" type="EAS.Data.Access.OleDbConnection" LifestyleType="Singleton">
      <property name="ConnectionString" type="string" value="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=sa;Initial Catalog=eas;Data Source=vm2003" />
    </object>
    <object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton">
      <property name="DbConnection" type="object" value="MasterDbConnection" />
    </object>
    <object name="CacheAccessor" assembly="EAS.Data" type="EAS.Data.ORM.CacheAccessor" LifestyleType="Singleton">
    </object>
    <object name="MasterDataAccessor" assembly="EAS.Data" type="EAS.Data.Access.OleDbAccessor" LifestyleType="Singleton">
      <property name="Connection" type="object" value="MasterDbConnection" />
    </object>
    <object name="MasterRMIAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.RMIAccessor" LifestyleType="Singleton">
      <constructor-arg index="0" type="string" value="http://demo.smarteas.net/activexform/Distributed/RMIService.asmx" />
    </object>

        对于IOC容器中的对象生存方式定义如下:

 

	/// <summary>
	/// 枚举LifestyleType 组件的生存方式,即组件以何种生存周期在容器中生存。
	/// </summary>
	public enum LifestyleType
	{
		/// <summary>
		/// Undefined,没有定义生存周期,即以默认生存周期(Transient)。
		/// </summary>
		Undefined = 0x00000000,

		/// <summary>
		/// Singleton,组件一旦自在,则在所有的客商端中共享。
		/// </summary>
		Singleton = 0x00000001,

		/// <summary>
		/// Thread,每一个客户端线程拥有单独的一个实例。
		/// </summary>
		Thread = 0x00000002,

		/// <summary>
		/// Transient,组件在使用时创建、使用后销毁。
		/// </summary>
		Transient = 0x00000004,

		/// <summary>
		/// Pooled,组件池,初始时分配一定数量的组件,客户请求时,分配一个空闲组件,用户使用完后交由池中。
		/// </summary>
		Pooled = 0x00000008
	}

在使用中IOC提供了基于配置文件和程序配置两种方式进行对象配置,IOC容器使用组件容器IContainer和IOC上下文环境IContext提供服务,IContainer定义如下:

IContainer

IContext定义:

IContext

 

  QQ群:15118502

链接:AgileEAS.NET应用开发平台介绍

AgileEAS.NET之敏捷并行开发方法

敏捷软件工程实验室


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。


    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/07/03/1770613.html,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
2月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
3月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
55 3
|
3月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
52 3
|
3月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
67 3
|
2月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
5月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
68 7
|
5月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
113 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
84 0
|
6月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
100 0

热门文章

最新文章