RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)...

RDIFramework.NET.NET快速开发整合框架

【开发实例】之产品管理(MVC版)

接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) 【开发实例】之产品管理(WebForm版)

第1部分 概述

  RDIFramework.NET,基于.NET的快速信息化系统开发、整合框架,为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业务部分的开发,因此大大提高开发效率和节约开发成本。框架采用目前最主流的C#语言开发完成,支持多种数据库类型,支持WinForm与Web。使用RDIFramework.NET能提高管理类软件系统的整体质量、提高模块与模块之间的兼容性、提高代码的重复利用率,使软件系统架构更加合理、质量更加过硬,使得劳动成果最大程度上重复利用。框架基础模块包括:强大灵活的权限控制组件,统一的模块分配与管理组件,灵活易用的工作流组件、集中的数据字典管理组件,自动升级组件,各种常用的商业控件(分页控件、组合查询控制、图片浏览控件等),多语言支持,强大的基于本框架的代码生成器,丰富的基础类库与开发辅助工具、内置MiNiWeb浏览器等各基础常用功能组件。应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。

  下面我们将使用RDIFramework.NET来开发一个应用,此应用皆在说明如何使用框架简单快速的进行开发。在这里我们要开发一个产品管理的功能模块,在开发前,我们需要进行数据库的设计,假设我们要开发一个产品管理模块。涉及的表为DemoProduct(产品信息实例表),这儿简单说明一下,一般我们建议每个表包含以下字段:DeleteMark(删除标志),SortCode(排序码),以及每条数据涉及的用户信息字段:CreateOn、CreateUserId、CreateBy、ModifiedOn、ModifiedUserId、ModifiedBy

表的设计图如下:

表结构明细如下:

第2部分开发前规划

  表设计好后,我们就可以着手开发的工作,在开发前我们一般需要确定当前系统所使用的数据库连接(非必须 ),模块的规划、模块所具有的操作按钮(操作权限项)设置,业务代码与界面UI的生成、功能测试等。

2.1 数据库连接定义

     “数据库连接管理”可以在我们框架下管理多个不同数据库类型的数据库连接,以方便我们具体的系统开发使用,即使后期服务器IP、数据库类型等改变了,只需在这儿进行简单修改,不用改变原有的程序或修改程序代码非常的方便。打开.NET快速开发整合框架,在“系统设置”->功能列表中选择“数据库连接管理”,打开“数据库连接管理”主界面,如图2.1.1所示。

图2.1.1 数据库连接管理

         在这儿,我们需要根据“产品管理”所在的数据库定义一个数据库连接,当然,在这儿如果已经存在了相应的数据库连接定义则不要重复定义,以免产生歧义。假设我的“产品管理”相关数据表放在“RDIFrameworkV3.0”数据库中,单击“添加”,打开“新增数据库连接”窗口,如图2.1.2所示。这儿需要特别说明的话,我们框架已经预留了几个连接常量,如:

  RDIFrameworkDbConection、BusinessDbConnection、WorkFlowDbConnection

  我们可以通过以下三个常量来进行访问,也可以定义我们自己的连接常量:

  SystemInfo.RDIFrameworkDbConection、SystemInfo.BusinessDbConnection、SystemInfo.WorkFlowDbConnection

  如果我们的业务系统与框架放在一个库中,则就不用再到“数据库连接管理”中去定义数据库连接了,直接使用SystemInfo.RDIFrameworkDbConection的连接字符串即可,其他类似。

图2.1.2 新增数据库连接

      在“新增数据库连接”窗口,“连接名称”不能与已经存在的连接名重复,连接类型为是数据库的类型,在这儿,我们是SqlServer,服务器地址则为数据库服务器地址,用户名与密码为登录数据库服务器的合法用户。这些定义好后单击“保存”即完成了数据库连接的定义。这儿的连接名称“ProductDBLink”非常重要,在基于框架开发的过程中,就是通过这个名称来访问产品实例库的。当然也可以不定义数据库连接字符器,这样框架会默认使用SystemInfo.BusinessDbConnection 的连接字符串。

2.2 模块规划

      模块规划即我们要开发的软件都包含那些模块,通俗的讲就是其拥有那些菜单项。我们在项目开始前都会做一个规划,当然后期也可以更改。在这儿我们为了方便说明,我们的产品管理只包含一个模块,即:“产品管理”模块。在框架左侧的功能列表中选择“模块管理”,打开“模块管理”主界面,如图2.2.1所示。

图2.2.1 模块管理

      在模块管理主界面,我们需要进行合理的规划,如由于我们的“测试产品管理”属于一个实例程序,我就在左侧树中选择“.NET快速开发整合框架”>“案例模块”下新增一个“测试产品管理”的模块。单击“添加”,打开“新增模块”窗口,如图2.2.2所示。

         图2.2.2 新增模块

     在“新增模块”窗口中,一定要注意看“上级菜单”是否是我们选择的模块,在这儿是“案例模块”,“名称”即在框架左侧功能列表显示的名称,“编号”不能重复,建议就是模块的名称,“MVC链接地址”就是模块所在的相对路径。“有效”标志说明我们新增的模块是否有效。“公开”标志说明此模块是否为公共(公开)模块,若为“公开模块”则所有登录框架的用户,不管其是否有此模块的访问权限,此模块对其都可见。同时我们也可以为其指定一个图标。单击“保存”即完成了一个模块的增加。

      对于WebForm的配置,可通过“Web地址”、“目标地址”、“图标”三项来进行配置。

      对于MVC的配置,则可“MVC地址”、“目标地址”、“图标”三项来进行配置。

2.3 操作权限规划

      由于是实例程序简单起见,假设我们的产品管理只有一些常见的操作功能(如:新增、编辑、删除、作废,查询等功能)。在框架左侧的功能列表中选择“操作权限管理”,打开“操作权限管理”主界面,如图2.3.1所示。

图2.3.1 操作权限管理主界面

      在上图中,我们已经完成了“测试产品管理”各操作权限的规划,对于后期有增删的操作权限,都可以进行灵活的操作。 

第3部分 开始开发

3.1 业务代码的生成

  使用框架提供的代码生成器可以快递的生成相应模块的所有业务逻辑代码,如下图所示:

  上图是单个生成业务逻辑相关的代码,我们也可以批量生成指定表的所有业务逻辑层的代码,也可以根据PowerDesgin设计文件来生成,批量生成如下所示:

  使用PowerDesign生成如下图所示:

  在上图中,我们选择我们要生成的表,设置好相应的属性后点生成,即可批量生成所有业务逻辑层的代码,生成后的代码可以单独放在一个项目中,也可以与页面项目放在一起,当然推荐单独把业务逻辑层的代码放在一个项目中,适当组织一下如下图所示:

3.2 页面代码的生成

  通过框架生成了业务逻辑代码后,Web或WinForm就可以使用这些业务逻辑层的代码,下面我们通过代码生成器来生成MvcUI部分。如下图所示,

  在上图中我们单击“生成MvcUI界面”,即可针对当前所选表生成UI部分,如下图所示:

  在上图中,我们单击“全部保存”,即可把生成的界面代码保存到指定位置并自动弹出。再把生成的代码放到VS项目解决方案合适的位置中即可,届时,一个模块的基本增、删、改、查、导出、分页等功能基本就完成了。这儿需要特别说明的是:上面生成的MVCUI界面代码的模版我们可以根据实际需要随时修改即可,非常的简单。生成的代码放到项目中如下图所示:

  具体放到MVCUI项目的什么位置,这个在开发前可以自己规划好即可,这个非常简单。通过以上几个步骤生成代码后再做适量的调整,即可完成一个简单的模块开发。

  同时添加必须的框架dll引用,如下图所示:

3.3 效果浏览

  通过前期DB的设计,到使用代码生成器来快递的代码生成,再做适量的调整后,一个功能模块就算基本完成了,现在我们来看下生成后的效果。

  1、  测试产品信息主界面:

  上图就是通过我们框架+代码生成器快递生成的界面,以上界面已经具备了基本的增加数据、修改数据、删除数据、导出数据、多条件查询、分页、右键菜单等常用功能。

  2、  新增界面

  3、  修改界面

  4、    导出数据

  导出数据功能,我们可以把数据 导出到Excel中。

  5、  查询

  “高级查询”就是多条件查询功能,我们可以多条件组合查询我们需要的数据。

  以下为UI代码的动态展示。

  

  参考文章:  

  RDIFramework.NET (.NET快速信息化系统开发整合框架) 【开发实例】之产品管理(WebForm版)

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)

RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V3.0 版本强势发布

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

  视频列表:

  第1部分、框架在不同数据库中的配置

第1.1讲、RDIFramework.NET框架在SqlServer2008+中的配置与运行讲解

第1.2讲、RDIFramework.NET框架在Oracle11g+中的配置与运行讲解

第1.3讲、RDIFramework.NET框架在MySql 5.0+ 中的配置与运行讲解

第2部分、框架基于代码生成器的开发

第2.1讲、RDIFramework.NET框架基于代码生成器业逻辑层代码的生成

第2.2讲、RDIFramework.NET框架基于代码生成器生成MvcUI的讲解

第2.2.1讲、RDIFramework.NET框架基于代码生成器生成MvcUI的讲解_第2.2讲补充视频

第2.3讲、RDIFramework.NET框架基于代码生成器生成WebFormUI的讲解

第2.4讲、RDIFramework.NET框架基于代码生成器生成的业务逻辑进行WinForm程序的开发

 

 

    一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。

      RDIFramework.NET官方网站:http://www.rdiframework.net/

      RDIFramework.NET官方博客:http://blog.rdiframework.net/

      同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏!

      RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用! 

   欢迎关注RDIFramework.net框架官方公众微信微信号:guosisoft),及时了解最新动态。

       扫描二维码立即关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对象关系映射架构(DBFramework)及代码生成器源码 一、使用对象关系映射组件Kenly.DBFramework.dll不用编写任何SQL或者存储过程即可实现下列功能: 1、数据表、视图和存储过程与对象之间的转换。 2、数据表、视图的自定义条件查询。 3、数据表、视图的分页查询。 4、根据ID、主键或自定义条件对数据表进行增、删、改操作。 5、实现一对一、一对多、多对一和多对多的关系映射。 6、支持单个对象和多个对象之间的事务控制。 7、支持查询结果排序。 8、支持查询表达式生成。 9、支持延迟加载。 二、代码生成器 1、根据指定的数据库连接,自动生成数据表、视图和存储过程对应的对象代码(C#代码)。 2、自动生成相关的工程文件,生成完整的业务层项目文件。 3、可以帮助生成自定义查询方法。 4、支持SQLServer2000、SQLServer2005和Oracle代码生成插件,支持插件扩展。 提供 1、对象关系映射组件: Kenly.DBFramework.dll 2、代码生成器源码:CodeHelper。 3、代码生成器插件源码(支持SQLServer2000、SQLServer2005和Oracle):Plugin。 4、使用手册:DBFramework.Manual V4.5.3.pdf。 主要API: public abstract class ViewGateway where T: new() { // Methods static ViewGateway(); protected ViewGateway(); protected static int Count(); protected static int Count(string condition); protected static List CountGroup(string groupBy); protected static List CountGroup(string condition, string groupBy); public static List CreateInstances(int count); protected static List Distinct(string columnName); protected static List Distinct(string columnName, string condition); protected static List Distinct(string columnName, string condition, bool ignoreNull); protected static bool Exists(string condition); public bool ExistsById(); public bool ExistsByPK(); protected static List Find(PagingArg pagingArg, params string[] propertyNames); protected static List Find(string condition, params string[] propertyNames); protected static List Find(PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static List Find(string condition, PagingArg pagingArg, params string[] propertyNames); protected static List Find(string condition, PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static List FindAll(params string[] propertyNames); protected static void FindTop(T firstOne); protected static List FindTop(int topCount, params string[] propertyNames); protected static void FindTop(string condition, T firstOne); protected static List FindTop(string condition, int topCount, params string[] propertyNames); protected static void InitializeGateway(GatewayConfig config); protected static void InitializeGateway(DatabaseType dbType, string connectionString); protected void InitializeInstance(T entity); protected static object Max(string columnName); protected static object Max(string columnName, string condition); protected static List MaxGroup(string columnName, string groupBy); protected static List MaxGroup(string columnName, string condition, string groupBy); protected static object Min(string columnName); protected static object Min(string columnName, string condition); protected static List MinGroup(string columnName, string groupBy); protected static List MinGroup(string columnName, string condition, string groupBy); protected static DataTable Query(PagingArg pagingArg, params string[] propertyNames); protected static DataTable Query(string condition, params string[] propertyNames); protected static DataTable Query(PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static DataTable Query(string condition, PagingArg pagingArg, params string[] propertyNames); protected static DataTable Query(string condition, PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static DataTable QueryAll(params string[] propertyNames); protected static DataTable QueryTop(int topCount, params string[] propertyNames); protected static DataTable QueryTop(string condition, int topCount, params string[] propertyNames); public ArrayList RetrieveAssociations(); public ArrayList RetrieveAssociations(Type elementType); public ArrayList RetrieveAssociations(params Type[] elementTypes); public void RetrieveById(); public void RetrieveByPK(); protected internal virtual void RetrieveBySql(string sql); public void ShadowCopyTo(object targetEntity); public void ShadowCopyTo(T targetEntity); protected static double Sum(string columnName); protected static double Sum(string columnName, string condition); protected static List SumGroup(string columnName, string groupBy); protected static List SumGroup(string columnName, string condition, string groupBy); public static string ToColumnName(string propertyName); public static T ToObject(DataRow adaptedRow); public static List ToObjects(DataTable adaptedTable); public static List ToObjects(DataRow[] adaptedRows); public static string ToPropertyName(string columnName); public static DataTable ToTable(IList entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static DataTable ToTable(bool isAdapted, IList entities); // Properties protected internal static string CommandText { get; } protected internal static GatewayConfig Config { get; } internal T Entity { get; set; } public object EntityId { get; } public object PrimaryKey { get; } protected static Order SortedOrder { get; set; } } public abstract class TableGateway : ViewGateway where T: TableGateway, new() { // Methods static TableGateway(); protected TableGateway(); public int AddNew(); public static int AddNew(IList entities); public static int AddNew(T entity); public int AddNew(bool returnIdentity); public static int AddNew(T entity, bool returnIdentity); public static int AddNew(IList entities, out Transaction transaction); public static int AddNew(IList entities, bool returnIdentity); public static int AddNew(T entity, out Transaction transaction); public static int AddNew(IList entities, bool returnIdentity, out Transaction transaction); public static int AddNew(T entity, bool returnIdentity, out Transaction transaction); public IDbTransaction BeginTransaction(); public IDbTransaction BeginTransaction(IsolationLevel isolationLevel); public IDbTransaction BeginTransaction(double activeTime); public IDbTransaction BeginTransaction(IsolationLevel isolationLevel, double activeTime); public bool Commit(); protected static int Delete(string condition); protected static int Delete(string condition, out Transaction transaction); public int DeleteById(); public static int DeleteById(T entity); public static int DeleteById(IList entities); public static int DeleteById(IList entities, out Transaction transaction); public static int DeleteById(T entity, out Transaction transaction); public int DeleteByPK(); public static int DeleteByPK(T entity); public static int DeleteByPK(IList entities); public static int DeleteByPK(IList entities, out Transaction transaction); public static int DeleteByPK(T entity, out Transaction transaction); protected void OnPropertyChanged(MethodBase propertyMethod); protected void OnPropertyChanged(string propertyName); protected internal override void RetrieveBySql(string sql); public bool Rollback(); protected static int Update(T entity, string condition); protected static int Update(T entity, string condition, out Transaction transaction); public int UpdateById(); public static int UpdateById(IList entities); public static int UpdateById(T entity); public static int UpdateById(T entity, out Transaction transaction); public static int UpdateById(IList entities, out Transaction transaction); public int UpdateByPK(); public static int UpdateByPK(IList entities); public static int UpdateByPK(T entity); public static int UpdateByPK(IList entities, out Transaction transaction); public static int UpdateByPK(T entity, out Transaction transaction); // Properties public bool Changed { get; } public List ChangedPropertyNames { get; } } public class StoredProcedure : IStoredProcedure { public bool BeginTransaction(); public void CloseReader(IDataReader reader); public bool Commit(); public DataSet ExecuteDataSet(); public DataTable ExecuteDataTable(); public DataTable ExecuteDataTable(); public List ExecuteEntity(); public int ExecuteNonQuery(); public IDataReader ExecuteReader(); public object ExecuteScalar(); protected static void InitializeGateway(GatewayConfig config); protected static void InitializeGateway(DatabaseType dbType, string connectionString); protected void InitializeInstance(T entity); public bool Rollback(); } public class AggregateEntity where T: AggregateEntity, new() { public static List Execute(); protected static List Execute(string condition); public static DataTable ExecuteDataTable(); protected static DataTable ExecuteDataTable(string condition); protected static void InitializeGateway(GatewayConfig config); protected static void InitializeGateway(DatabaseType dbType, string connectionString); // Properties protected static Order SortedOrder { get; set; } } public static class EntityMapper { // Methods public static void AdaptToDatabase(DataTable adaptedTable); public static void AdaptToEntity(DataTable rawTable); public static void CopyToEntities(IList entities, IList adaptedRows); public static void CopyToEntities(IList entities, DataTable adaptedTable); public static void CopyToEntity(T entity, DataRow row); public static List CreateEntities(int count); public static DataTable CreateTable(); public static DataTable CreateTable(bool isAdapted); public static string ToColumnName(string propertyName); public static List ToEntities(IList adaptedRows); public static List ToEntities(DataTable table); public static T ToEntity(DataRow adaptedRow); public static string ToPropertyName(string columnName); public static DataTable ToTable(IList entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static DataTable ToTable(bool isAdapted, IList entities); } public static class EntityUtility { // Methods public static List Inherit(IList entities); public static T Inherit(object entity); public static T Inherit(Tbase baseEntity, TransformAction method); public static List Inherit(IList baseEntities, TransformAction method); public static void ShadowCopy(IList targetEntities, IList sourceEntities); public static void ShadowCopy(object targetEntity, object sourceEntity); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值