用MVC做WinForm客户端

昨天突然脑洞大开,觉得WinForm客户端也可以做成MVC!想到就做!于是把以前做的一个WinForm工程拉出来,选了角色权限模块先试个水。

第一步:调整项目结构,调整后结构如下图:

第二步:拆分逻辑

原来整个窗体类里面包含了很多业务逻辑,这部分不用说,直接拆分到Controller里面,还有工具栏点击事件的处理逻辑,也同样分离出来放到Controller里面。拆分之后,窗体类就变成了一个纯粹的View了。至于Model,就是拖进一个叫Model的文件夹里面就好了。

第三步:处理命名空间变化带来的一系列问题。大概花了两小时,部分重构完成,程序运行正常!


总结:重构后逻辑更加清晰,任务更容易分解,也更容易进行单元测试。这个思路个人认为值得推广。

部分代码:

Manager:

using System;
using System.Collections.Generic;
using System.Linq;
using DevExpress.XtraBars;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraTreeList;
using Insight.WS.Client.Base.Role.Controller;
using Insight.WS.Client.Base.Role.Model;
using Insight.WS.Client.Common;

namespace Insight.WS.Client.Base.Role.View
{
    public partial class Manager : MdiBase
    {

        #region 变量声明

        public static List<RoleInfo> Roles;
        public static RoleInfo Role;
        private bool First = true;

        #endregion

        #region 构造函数

        public Manager()
        {
            InitializeComponent();

            // 注册事件
            gdvRole.FocusedRowObjectChanged += gdvRole_FocusedRowObjectChanged;
            treMember.CustomDrawNodeImages += CustomDrawNodeImages;
            treModule.CustomDrawNodeImages += DrawNodeImages;
            treAction.CustomDrawNodeImages += DrawNodeImages;
            treData.CustomDrawNodeImages += DrawNodeImages;
        }

        #endregion

        #region 界面事件处理

        /// <summary>
        /// 窗体加载时初始化控件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RoleManage_Load(object sender, EventArgs e)
        {
            InitToolBar();
            Roles = new List<RoleInfo>();
            Role = new RoleInfo();

            // 初始化角色列表
            grdRole.DataSource = Roles;
            Format.GridFormat(gdvRole);

            // 初始化角色成员
            treMember.SelectImageList = imgMember;
            treMember.DataSource = R
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值