前言

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到框架容器窗体。

  1. private void ribbon_Merge(object sender, DevExpress.XtraBars.Ribbon.RibbonMergeEventArgs e)
  2. {
  3. RibbonControl parentRRibbon = sender as RibbonControl;
  4. RibbonControl childRibbon = e.MergedChild;
  5. parentRRibbon.StatusBar.MergeStatusBar(childRibbon.StatusBar);
  6. }
  7.  
  8. private void ribbon_UnMerge(object sender, RibbonMergeEventArgs e)
  9. {
  10. RibbonControl parentRRibbon = sender as RibbonControl;
  11. parentRRibbon.StatusBar.UnMergeStatusBar();
  12. }

4.配置文件

每个插件可以包含多个窗体,每个窗体可以包含多个RibbonPage。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.  
  4. <configSections>
  5. <sectionGroup name="spring">
  6. <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
  7. <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
  8. </sectionGroup>
  9. </configSections>
  10.  
  11. <spring>
  12. <context>
  13. <resource uri="config://spring/objects" />
  14. </context>
  15. <objects xmlns="http://www.springframework.net">
  16. <description>An example that demonstrates simple IoC features.</description>
  17. <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
  18. <object name="用户管理" type="Plugin.Employee.ChildForm1,Plugin.Employee" />
  19. <object name="部门管理" type="Plugin.Dept.ChildForm2,Plugin.Dept" />
  20. </objects>
  21. </spring>
  22.  
  23. <runtime>
  24. <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  25. <probing privatePath="Lib;"/>
  26. </assemblyBinding>
  27. </runtime>
  28.  
  29. <system.data>
  30. <DbProviderFactories>
  31. <remove invariant="System.Data.SQLite"/>
  32. <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="ADO.NET Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
  33. <remove invariant="MySql.Data.MySqlClient"/>
  34. <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
  35. <remove invariant="Oracle.ManagedDataAccess.Client"/>
  36. <add name="Oracle Data Provider" invariant="Oracle.ManagedDataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess" />
  37. <remove invariant="IBM.Data.DB2"/>
  38. <add name="DB2 Data Provider" invariant="IBM.Data.DB2" description=".Net Framework Data Provider for DB2" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2" />
  39. </DbProviderFactories>
  40. </system.data>
  41.  
  42. <!--数据库连接-->
  43. <connectionStrings>
  44. <add name="Default" providerName="Sqlite" connectionString="Data Source=|DataDirectory|Data.db;Version=3;"/>
  45. <!--add name="Default" providerName="SqlServer" connectionString="Data Source=localHost;Initial Catalog=Agile;Integrated Security=SSPI;"/-->
  46. </connectionStrings>
  47.  
  48. </configuration>

5.数据访问类库的示例

  1. public class Business
  2. {
  3. public static DataTable GetAllGrade()
  4. {
  5. var context = new FFW.Data.DataContext();
  6. //方式1
  7. //DataTable grades = context.Select<DataTable>("ID,Class,Level").From("Grade").QuerySingle();
  8. //方式2
  9. DataTable grades = context.Script("Select ID,Class,Level From Grade").QuerySingle<DataTable>();
  10. return grades;
  11. }
  12. public static List<Student> GetAllStudent()
  13. {
  14. var context = new FFW.Data.DataContext();
  15. return context.Script("Select ID,Name,Age From Student").QueryMany<Student>();
  16. }
  17. }

6.报表组件类库的示例

  1. var report = new FFW.Report.ReportEx();
  2. report.DataSources.Add("",Business.GetAllGrade());
  3. report.DataSources.Add("Student", Business.GetAllStudent());
  4. report.Parameters.Add("参数1", "FastFrameWork 快速开发框架");
  5. report.Parameters.Add("参数2", DateTime.Now);
  6. report.LoadFrom(Path.Combine(Application.StartupPath, "Report", "test.frx"));
  7. report.Print();

结语

好了,通过以上简单的介绍后相信你对FastFrameWork 快速开发框架已经有一些认识了,如果你想对FastFrameWork 快速开发框架深入了解请下载完整源代码。

FastFrameWork 快速开发框架的更多相关文章

  1. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程六(分布式缓存解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程五(使用缓存)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. HDU-5347 MZL's chemistry

    http://acm.hdu.edu.cn/showproblem.php?pid=5347 MZL's chemistry Time Limit: 2000/1000 MS (Java/Others ...

  2. 解决 EF 分层查询的一个性能问题[转]

    前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了 ...

  3. Linux SCP 命令: 利用SSH传输文件

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...

  4. [读书笔记]算法(Sedgewick著)·第二章.初级排序算法

    本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...

  5. springMVC学习笔记--初识springMVC

    前一段时间由于项目的需要,接触了springMVC(这里主要是讲3.1版,以下内容也是围绕这个版本展开),发觉其MVC模式真的很强大,也简单易用,完全是基于注解实现其优雅的路径配置的.想想以前接手的项 ...

  6. 解决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 ...

  7. sublime text高亮less

    1.打开sublime,ctrl+shift+p打开命令面板,找到package control:install Package,然后选择less2css,回车. 2.继续ctrl+shift+p打开 ...

  8. 将list转换为json失败

    估计你是用的hibernate的自动注解,并且里面有一对多,多对一的关系,这是需要在不需要的字段上加上注解@JsonIgnore, 这样的话在list转json的时候就会忽略加上@JsonIgnore ...

  9. SQL Server 2000的安全配置

    SQL Server 2000的安全配置 数据库是电子商务.金融连同ERP系统的基础,通常都保存着重要的商业伙伴和客户信息.大多数企业.组织连同政府 部门的电子数据都保存在各种数据库中,他们用这些数据 ...

  10. Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)

    # 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...