FastFrameWork 快速开发框架
前言
FastFrameWork 快速开发框架是一款基于敏捷并行开发思想和Microsoft .Net构件(插件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。
FastFrameWork 快速开发框架是适用于小型软件的一套快速开发解决方案。基于DevExpress16.1 开发,采用Ribbon UI设计风格,插件式扩展模块,配合Agile.Net数据访问组件与Agile.Net数据报表组件,能够快速的进行小型软件产品开发。
FFW.Data.dll 是数据访问组件是支持多种主流数据库的ORM,详细介绍
FFW.Report.dll 是数据报表组件提供报表打印、报表预览、报表设计、自定义报表数据源等二次开发功能,详细介绍
FastFrameWork 快速开发框架项目,已经托管在开源中国码云平台(http://gitee.com/MuNet/FastFrameWork)
欢迎大家提意见,使用过程中如果有疑问或者想参与框架代码维护,请加入Agile.Net QQ交流群(10062867)。
首先展示一下运行界面:
项目代码结构:
下面我们介绍一下开发案例:
1.主界面设计
2.插件窗体设计
3.技术原理
主界面采用Ribbon风格,通过控制反转(IOC)将配置的插件载入框架中,并将插件窗体载入到框架容器窗体MDI区,合并插件窗体的RibbonPage与RibbonControl到框架容器窗体。
- private void ribbon_Merge(object sender, DevExpress.XtraBars.Ribbon.RibbonMergeEventArgs e)
- {
- RibbonControl parentRRibbon = sender as RibbonControl;
- RibbonControl childRibbon = e.MergedChild;
- parentRRibbon.StatusBar.MergeStatusBar(childRibbon.StatusBar);
- }
- private void ribbon_UnMerge(object sender, RibbonMergeEventArgs e)
- {
- RibbonControl parentRRibbon = sender as RibbonControl;
- parentRRibbon.StatusBar.UnMergeStatusBar();
- }
4.配置文件
每个插件可以包含多个窗体,每个窗体可以包含多个RibbonPage。
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <configSections>
- <sectionGroup name="spring">
- <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
- <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
- </sectionGroup>
- </configSections>
- <spring>
- <context>
- <resource uri="config://spring/objects" />
- </context>
- <objects xmlns="http://www.springframework.net">
- <description>An example that demonstrates simple IoC features.</description>
- <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
- <object name="用户管理" type="Plugin.Employee.ChildForm1,Plugin.Employee" />
- <object name="部门管理" type="Plugin.Dept.ChildForm2,Plugin.Dept" />
- </objects>
- </spring>
- <runtime>
- <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
- <probing privatePath="Lib;"/>
- </assemblyBinding>
- </runtime>
- <system.data>
- <DbProviderFactories>
- <remove invariant="System.Data.SQLite"/>
- <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="ADO.NET Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
- <remove invariant="MySql.Data.MySqlClient"/>
- <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
- <remove invariant="Oracle.ManagedDataAccess.Client"/>
- <add name="Oracle Data Provider" invariant="Oracle.ManagedDataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess" />
- <remove invariant="IBM.Data.DB2"/>
- <add name="DB2 Data Provider" invariant="IBM.Data.DB2" description=".Net Framework Data Provider for DB2" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2" />
- </DbProviderFactories>
- </system.data>
- <!--数据库连接-->
- <connectionStrings>
- <add name="Default" providerName="Sqlite" connectionString="Data Source=|DataDirectory|Data.db;Version=3;"/>
- <!--add name="Default" providerName="SqlServer" connectionString="Data Source=localHost;Initial Catalog=Agile;Integrated Security=SSPI;"/-->
- </connectionStrings>
- </configuration>
5.数据访问类库的示例
- public class Business
- {
- public static DataTable GetAllGrade()
- {
- var context = new FFW.Data.DataContext();
- //方式1
- //DataTable grades = context.Select<DataTable>("ID,Class,Level").From("Grade").QuerySingle();
- //方式2
- DataTable grades = context.Script("Select ID,Class,Level From Grade").QuerySingle<DataTable>();
- return grades;
- }
- public static List<Student> GetAllStudent()
- {
- var context = new FFW.Data.DataContext();
- return context.Script("Select ID,Name,Age From Student").QueryMany<Student>();
- }
- }
6.报表组件类库的示例
- var report = new FFW.Report.ReportEx();
- report.DataSources.Add("",Business.GetAllGrade());
- report.DataSources.Add("Student", Business.GetAllStudent());
- report.Parameters.Add("参数1", "FastFrameWork 快速开发框架");
- report.Parameters.Add("参数2", DateTime.Now);
- report.LoadFrom(Path.Combine(Application.StartupPath, "Report", "test.frx"));
- report.Print();
结语
好了,通过以上简单的介绍后相信你对FastFrameWork 快速开发框架已经有一些认识了,如果你想对FastFrameWork 快速开发框架深入了解请下载完整源代码。
FastFrameWork 快速开发框架的更多相关文章
- CRL快速开发框架系列教程十三(嵌套查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程五(使用缓存)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- HDU-5347 MZL's chemistry
http://acm.hdu.edu.cn/showproblem.php?pid=5347 MZL's chemistry Time Limit: 2000/1000 MS (Java/Others ...
- 解决 EF 分层查询的一个性能问题[转]
前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了 ...
- Linux SCP 命令: 利用SSH传输文件
在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...
- springMVC学习笔记--初识springMVC
前一段时间由于项目的需要,接触了springMVC(这里主要是讲3.1版,以下内容也是围绕这个版本展开),发觉其MVC模式真的很强大,也简单易用,完全是基于注解实现其优雅的路径配置的.想想以前接手的项 ...
- 解决org.apache.subversion.javahl.ClientException: svn: E200007: Runner for 'org.tmatesoft.svn.core.wc2.SvnMerge' command have not been found
最近使用svn的merge功能合并代码,一直出现一个错误: org.apache.subversion.javahl.ClientException: svn: E200007: Runner for ...
- sublime text高亮less
1.打开sublime,ctrl+shift+p打开命令面板,找到package control:install Package,然后选择less2css,回车. 2.继续ctrl+shift+p打开 ...
- 将list转换为json失败
估计你是用的hibernate的自动注解,并且里面有一对多,多对一的关系,这是需要在不需要的字段上加上注解@JsonIgnore, 这样的话在list转json的时候就会忽略加上@JsonIgnore ...
- SQL Server 2000的安全配置
SQL Server 2000的安全配置 数据库是电子商务.金融连同ERP系统的基础,通常都保存着重要的商业伙伴和客户信息.大多数企业.组织连同政府 部门的电子数据都保存在各种数据库中,他们用这些数据 ...
- Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
# 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...