缘起

一般在做 WINFORM 开发时,通常都是将很多业务逻辑直接写在 Form 的事件代码里,造成业务逻辑就和界面逻辑紧密耦合在一起。这种情况下,如果业务逻辑稍有变化,涉及的改动量非常大,甚至于整个界面可能都需要重新调整,测试起来也很麻烦。

几年前,给某市城管委做一个瓶装液化气智能监管信息项目,就在这方面吃了一点亏。

因此,我后来花了一点时间,做了一个简单的 WinForm MVC 框架(个人独立开发,与我当时所在的公司无关,也从未在当时的公司用过),设想着以后如果再遇到类似项目,可以直接拿来用。结果做完之后,也没有在后来的实际项目中用到。多少有点遗憾,权当是一次练手吧,也许以后再用到也说不好。所以现在我决定把这个东西开源出来,有需要的人可以拿去用。

代码和用法

我给这个 winform mvc 框架写了一个示例,下面的代码是从示例中摘取出来的一部分源码:

 1 using ContactManager.DataMapping;
 2 using ContactManager.Filters;
 3 using ContactManager.Services;
 4 using ContactManager.Utils;
 5 using ContactManager.Views.Model;
 6 using ContactManager.Views.Utils;
 7 using My.WinformMvc;
 8
 9 namespace ContactManager.Controllers
10 {
11     [MvcController(Constant.ListController)]
12     public class ListController : BaseController
13     {
14         readonly IContactService _contactService;
15
16         public ListController(IContactService contactService, IView view)
17             : base(view)
18         {
19             _contactService = contactService;
20         }
21
22         public override IActionResult DisplayView()
23         {
24             var myContacts = _contactService.GetContacts().ToModel();
25             return base.DisplayView(myContacts);
26         }
27
28         [RoleBasedAuthorization(Roles = Constant.AdminRoles)]
29         [ConfirmDelete]
30         [NotifyDelete]
31         [WriteResult]
32         public IActionResult Delete(ContactModel model)
33         {
34             Logger.Log("Before ListController.Delete");
35             _contactService.DeleteContact(model.Id);
36             Logger.Log("After ListController.Delete");
37             return DisplayView();
38         }
39     }
40 }

(ListController 源码)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Windows.Forms;
 4 using ContactManager.Utils;
 5 using ContactManager.Views.Model;
 6 using ContactManager.Views.Utils;
 7 using My.WinformMvc;
 8
 9 namespace ContactManager.Views
10 {
11     [MvcView("ListView")]
12     public partial class ListView : BaseView, IView<List<ContactModel>>
13     {
14         public ListView()
15         {
16             InitializeComponent();
17         }
18
19         public void BindModel(List<ContactModel> model)
20         {
21             Logger.Log("ListView.BindModel");
22             contactDataGridView.DataSource = model;
23         }
24
25         private void btClose_Click(object sender, EventArgs e)
26         {
27             Application.Exit();
28         }
29
30         private void btnDelete_Click(object sender, EventArgs e)
31         {
32             if (contactDataGridView.SelectedRows.Count == 0)
33             {
34                 MessageBox.Show("Please select a row first!", "Information");
35                 return;
36             }
37
38             var contact = contactDataGridView.CurrentRow.DataBoundItem as ContactModel;
39             InvokeAction("Delete", contact);
40         }
41
42         private void btnAdd_Click(object sender, EventArgs e)
43         {
44             OpenView(Constant.EditController, new ContactModel{ IsEdit = false });
45         }
46
47         private void btnUpdate_Click(object sender, EventArgs e)
48         {
49             if (contactDataGridView.SelectedRows.Count == 0)
50             {
51                 MessageBox.Show("Please select a row first!", "Information");
52                 return;
53             }
54             var contact = contactDataGridView.CurrentRow.DataBoundItem as ContactModel;
55             contact.IsEdit = true;
56             OpenView(Constant.EditController, contact);
57         }
58     }
59 }

(ListView 源码)

以下是运行这个示例的几张截图:

如果您对这个框架感兴趣,可以直接点击 此处 下载框架源码(含示例)。

转载于:https://www.cnblogs.com/johnny-liu/p/7216631.html

My.WinformMvc,一个 Winform MVC 框架相关推荐

  1. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  2. 自己手写一个Spring MVC框架

    想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...

  3. JAVA小程序:一个基于MVC框架的贪吃蛇程序

    学习JAVA也有一段时间了,之前看了翁恺老师的视频,跟着做了一个细胞自动机,粗浅地了解了一点MVC框架的知识,感觉获益匪浅.但是细胞自动机毕竟是跟着视频完成的,有很大程度上都是参考了视频里的代码,没有 ...

  4. mvc框架自个儿搭建

    mvc 框架 自己搭建 php框架 个人觉得根据自己需求,选中最佳最适合自己MVC框架,并在开发中能够体现出敏捷开发的效果就OK了,作为一个PHPer要提高自己的对PHP和MVC的框架的认识,所以自己 ...

  5. [轉]最流行的PHP MVC框架

    From : http://yp.oss.org.cn/software/show_resource.php?resource_id=742 本文给大家介绍一下国外最流行的基于MVC设计模式的PHP框 ...

  6. JavaScript MVC 框架开源软件

    HTML的Web框架AngularJS Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进 ...

  7. 自己动手写PHP MVC框架

    自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...

  8. nodejs MVC框架:Adonisjs框架入门-001概述

    Adonisjs是一个MVC结构的Nodejs后端框架,可以用来创建WEB应用.API服务,包含处理 HTTP adonisjs是一个后端mvc框架,基于nodejs,使用typescript语言编写 ...

  9. koa-grace:一个基于koa的node多应用MVC框架

    春节期间没回家留在北京写了一个基于koa的node MVC框架:koa-grace ,大家有兴趣可以star & fork下,谢谢支持啦!! 项目地址: https://github.com/ ...

最新文章

  1. 制作win2000能用的 schtasks.exe
  2. Oracle数据加载之sqlldr工具的介绍
  3. PostgreSQL 安装配置 (亲测可用)
  4. java中如何就绝对定位,Java中如何定位资源
  5. 3.1.1 计算机网络之数据链路的基本概念和功能概述
  6. 角谷定理python每次输出数_角谷定理C++递归问题,求问步数为什么总输出0?
  7. 关于 Angular 项目类型为 library 的工程使用 tsconfig.json 的问题
  8. 【转】小白级的CocoaPods安装和使用教程
  9. down.php无法打开,php下载文件 图片不能打开,该怎么解决
  10. 【Java中级】(五)异常处理
  11. 在B/S系统中引入定时器的功能
  12. js能判断当前字符串是一个完整单词吗_LeetCode30串联所有单词的子串31下一个排列...
  13. 2019PMP项目管理考试报名时间取证流程-真题模拟题
  14. QT5.11下载与安装教程
  15. WordPress导航主题/酷啦鱼导航主题模板
  16. 谷歌街景地图推出“时光机”功能
  17. 如何安装.ipa文件
  18. MAC和WINDOWS链接小米路由器移动硬盘方法
  19. 大专什么专业学c语言,大专专业计算机网络技术学不学编程
  20. 【cocos源码学习】解决cocos2d-x-4.0 Android Demo构建遇到的问题

热门文章

  1. ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
  2. 视频质量,分辨率,码率之间的关系 2
  3. pycharm项目中如何安装包_如何将Thymeleaf技术集成到SpringBoot项目中
  4. android 内核裁剪概述,Android内核的编译与裁剪
  5. servlet的四种响应
  6. layer右下脚弹窗
  7. 手机如何看python文件大小_如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)...
  8. 【HDOJ2222】Keywords Search(AC自动机)
  9. ddwrt 扩张linux分区,『2010.8.9』DDWRT脱机下载+架设网站修正加强版tar.gz模式发布(修复下载地址)...
  10. C语言读取图像像素坐标,OpenCL中读取image时的坐标