My.WinformMvc,一个 Winform MVC 框架
2017-07-24 09:51
176 查看
缘起
一般在做 WINFORM 开发时,通常都是将很多业务逻辑直接写在 Form 的事件代码里,造成业务逻辑就和界面逻辑紧密耦合在一起。这种情况下,如果业务逻辑稍有变化,涉及的改动量非常大,甚至于整个界面可能都需要重新调整,测试起来也很麻烦。
几年前,给某市城管委做一个瓶装液化气智能监管信息项目,就在这方面吃了一点亏。
因此,我后来花了一点时间,做了一个简单的 WinForm MVC 框架(个人独立开发,与我当时所在的公司无关,也从未在当时的公司用过),设想着以后如果再遇到类似项目,可以直接拿来用。结果做完之后,也没有在后来的实际项目中用到。多少有点遗憾,权当是一次练手吧,也许以后再用到也说不好。所以现在我决定把这个东西开源出来,有需要的人可以拿去用。
代码和用法
我给这个 winform mvc 框架写了一个示例,下面的代码是从示例中摘取出来的一部分源码:
(ListController 源码)
(ListView 源码)
以下是运行这个示例的几张截图:
如果您对这个框架感兴趣,可以直接点击 此处 下载框架源码(含示例)。
一般在做 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 源码)
以下是运行这个示例的几张截图:
如果您对这个框架感兴趣,可以直接点击 此处 下载框架源码(含示例)。
相关文章推荐
- 一个很好用的WinForm数据验证框架(自己开发)
- 分享一个基于Bootstrap的 ACE框架 入门(MVC+EF)
- [导入]ASP.NET MVC框架开发系列课程(2):一个简单的ASP.NET MVC应用程序.zip(13.70 MB)
- 一个简单的HelloWord SpringMVC框架的搭载
- 分享一个漂亮的ASP.NET MVC界面框架
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- cat-mvc 一个nodejs mvc 框架
- 《android网络请求框架》一个轻量级的异步网络请求框架MyHttpUtils(新版更新记录,版本号:2.X)
- 对spring有一个更深次的认识 MVC 框架 AOP 框架 Security 框架
- 用 JAX-RS 和 JSR 371 规范设计一个 MVC 框架(二)HelloWorld
- 《Android网络请求篇》MyHttpUtils一个非常好用的异步网络请求框架
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
- 扩展Html Helper类,ASP.NET MVC框架提供了一个帮助我们构造Html元素的类:TagBuilder
- 2015年3月26日 - Javascript MVC 框架DerbyJS DerbyJS 是一个 MVC 框架,帮助编写实时,交互的应用。
- 第7章 SportsStore:一个真实的应用程序 — 精通MVC 3 框架
- 终于找到了一个基于ASP.NET MVC框架下的CMS系统——Orchard!
- 35-002-1 struts前期之 通过JAVA反射机制及XML配置文件解析自定义一个MVC的简单框架
- Ninject 在 Winform、 Asp.net MVC中结合EntityFramework的使用( 注入同一个DbContext的使用方法) - 原创
- 介绍一个基于ASP.NET MVC的框架Catharsis
- 分享一个sprng mvc+spring+mabatis 框架集成的项目示例