My.WinformMvc,一个 Winform MVC 框架
缘起
一般在做 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 框架相关推荐
- 从 0 开始手写一个 Spring MVC 框架,向高手进阶
转载自 从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...
- 自己手写一个Spring MVC框架
想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...
- JAVA小程序:一个基于MVC框架的贪吃蛇程序
学习JAVA也有一段时间了,之前看了翁恺老师的视频,跟着做了一个细胞自动机,粗浅地了解了一点MVC框架的知识,感觉获益匪浅.但是细胞自动机毕竟是跟着视频完成的,有很大程度上都是参考了视频里的代码,没有 ...
- mvc框架自个儿搭建
mvc 框架 自己搭建 php框架 个人觉得根据自己需求,选中最佳最适合自己MVC框架,并在开发中能够体现出敏捷开发的效果就OK了,作为一个PHPer要提高自己的对PHP和MVC的框架的认识,所以自己 ...
- [轉]最流行的PHP MVC框架
From : http://yp.oss.org.cn/software/show_resource.php?resource_id=742 本文给大家介绍一下国外最流行的基于MVC设计模式的PHP框 ...
- JavaScript MVC 框架开源软件
HTML的Web框架AngularJS Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进 ...
- 自己动手写PHP MVC框架
自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...
- nodejs MVC框架:Adonisjs框架入门-001概述
Adonisjs是一个MVC结构的Nodejs后端框架,可以用来创建WEB应用.API服务,包含处理 HTTP adonisjs是一个后端mvc框架,基于nodejs,使用typescript语言编写 ...
- koa-grace:一个基于koa的node多应用MVC框架
春节期间没回家留在北京写了一个基于koa的node MVC框架:koa-grace ,大家有兴趣可以star & fork下,谢谢支持啦!! 项目地址: https://github.com/ ...
最新文章
- 制作win2000能用的 schtasks.exe
- Oracle数据加载之sqlldr工具的介绍
- PostgreSQL 安装配置 (亲测可用)
- java中如何就绝对定位,Java中如何定位资源
- 3.1.1 计算机网络之数据链路的基本概念和功能概述
- 角谷定理python每次输出数_角谷定理C++递归问题,求问步数为什么总输出0?
- 关于 Angular 项目类型为 library 的工程使用 tsconfig.json 的问题
- 【转】小白级的CocoaPods安装和使用教程
- down.php无法打开,php下载文件 图片不能打开,该怎么解决
- 【Java中级】(五)异常处理
- 在B/S系统中引入定时器的功能
- js能判断当前字符串是一个完整单词吗_LeetCode30串联所有单词的子串31下一个排列...
- 2019PMP项目管理考试报名时间取证流程-真题模拟题
- QT5.11下载与安装教程
- WordPress导航主题/酷啦鱼导航主题模板
- 谷歌街景地图推出“时光机”功能
- 如何安装.ipa文件
- MAC和WINDOWS链接小米路由器移动硬盘方法
- 大专什么专业学c语言,大专专业计算机网络技术学不学编程
- 【cocos源码学习】解决cocos2d-x-4.0 Android Demo构建遇到的问题
热门文章
- ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
- 视频质量,分辨率,码率之间的关系 2
- pycharm项目中如何安装包_如何将Thymeleaf技术集成到SpringBoot项目中
- android 内核裁剪概述,Android内核的编译与裁剪
- servlet的四种响应
- layer右下脚弹窗
- 手机如何看python文件大小_如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)...
- 【HDOJ2222】Keywords Search(AC自动机)
- ddwrt 扩张linux分区,『2010.8.9』DDWRT脱机下载+架设网站修正加强版tar.gz模式发布(修复下载地址)...
- C语言读取图像像素坐标,OpenCL中读取image时的坐标