DataBase => O/R mapping Class => UI 解决方案(.NET/CS/WinForm/Linq) 续

这篇算补充一下上一篇 (注:这种方式并不一定好,仅单纯做演示讨论,并不真正推荐)

 

此类框架(控件)设计的原则在于提高开发效率,隐藏细节。带来的问题是导致分层困难,运行效率较低。

所以,此类框架适用范围是小项目。(较少用户,较短开发周期,但还有不少业务逻辑),甚至,可以用来做sample,给客户做演示用。

 

同时,随着框架的使用,业务逻辑也是可以被继续提炼的。比如,对于数据准确性/安全性较高的项目,往往需要 有一个用户审核其他用户的输入,可以审批通过,也可以拒绝审批,这样就有一个简单的工作流。(所谓常说的 maker/checker或者dualcontrol)。往往,要让一个初级开发人员了解 maker提交/checker审批/maker重新提交等等操作流程也需要一定时间,且其中有大量细节问题,可能导致项目产生bug(可能是代码考虑不周,也可能是业务上的理解问题)

 

所以,这里,再对之前提到的组建进行封装,将maker/checker的流程,代码均封装起来。开发者需要做的是:建表,创建配置;

以下展示一系列界面,是一套完整的 增/删/改/查/审批/拒批/修正重提交 界面,可以一边看一遍猜测一下,这样一套sample需要多少代码,多少时间来做。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

让我们来看一下实际的代码量:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Business.CommonLogic.CurrentInformation = new Business.CurrentInformation();
            Business.CommonLogic.CurrentInformation.SQLConnectionString = DataAccess.GetBranchConnection.GetConnection("Default");
            Business.CommonLogic.CurrentInformation.UserName = "System";

            Business.Forms.EntityPendingDescription<TB_LAMP_Alert_Switch, TB_LAMP_Alert_Switch_Pending> pd = new NCS.Business.Forms.EntityPendingDescription<TB_LAMP_Alert_Switch, TB_LAMP_Alert_Switch_Pending>()
            {
                AuthBy_Property = "ApproveBy",
                AuthDate_Property = "ApproveDate",
                AuthStatus_Property = "Auth_Status",
                SubmitBy_Property = "SubmitBy",
                SubmitDate_Property = "SubmitDate",
                DataStatus_Property = "Status",
                AuthStatus_ApproveValue = Auth_Status.Approve,
                AuthStatus_PendingValue = Auth_Status.Submit,
                AuthStatus_RejectValue = Auth_Status.Reject,
                DataStatus_AddValue = Data_Status.Add,
                DataStatus_EditValue = Data_Status.Edit,
                DataStatus_RemoveValue = Data_Status.Remove,
            };//这里是关键,配置类中告诉框架,数据库中用来记录maker/checker的字段,记录状态的字段,值等信息。框架将通过这些信息完成对整个流程的操作,无需额外编写代码

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form f = null;
            Form1 fs = new Form1(); //这是一个包含2个按钮的窗口,点maker关闭自身,并设置属性maker=true,点checker直接关闭自身
            fs.ShowDialog();
            if (fs.Maker)
            {
                f = new NCS.Business.Forms.frmMaintenance<TB_LAMP_Alert_Switch, TB_LAMP_Alert_Switch_Pending>(
                        null, "Alert Switch", null, true, true, pd);
            }
            else
            {
                f = new NCS.Business.Forms.frmMaintenance_Checker<TB_LAMP_Alert_Switch, TB_LAMP_Alert_Switch_Pending>(
                        "Alert Switch Checker", null, pd, null);
            }


            Application.Run(f);
        }
    }

    [UI.DataMapping.HideEnumItem(Auth_Status.System_Auto)]
    public enum Auth_Status
    {
        System_Auto = 0, Submit = 1, Approve = 2, Reject = 3
    }

    [UI.DataMapping.HideEnumItem(Data_Status.Undefined)]
    public enum Data_Status
    {
        Undefined = 0, Add = 1, Edit = 2, Remove = 3
    }
}


 

 这是一个封装的极端例子,实际开发中,不一定能适用,但作为开发者,特别是初学者,不断的提炼自己的项目/实现/代码可以提高自己水平的同时减少将来的工作量,在未来的工作中使用自己之前封装的代码可以发现封装的不足,更容易促进自己的进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值