首页新闻找找看学习计划

事件流的问题

0
悬赏园豆:200 [已解决问题] 解决于 2014-07-01 18:56

事件(对象/相关对象,增删改)-->触发-->动作

动作包括1 加入相关员工

    2 加入负责员工

    3 更改属性 对象/引用对象的属性

大概需求是这样的,在后台设置事件逻辑后,前台相关操作触发按照设置预定义的相应的响应

是不是需要设计单独的表来保存这些设置信息??还有怎么让它们自动同步啊,木有思路.....求指点...(头回提问...好紧张.....)

NancyChan的主页 NancyChan | 初学一级 | 园豆:22
提问于:2013-01-29 10:38
< >
分享
最佳答案
0

建立一张表来存放这些日志即可

你在你的业务逻辑层的对象里都实现一个接口,这个接口包含你需要触发的事件

然后调用这个对象时触发这个事件把记录添入表中

收获园豆:100
Rich.T | 老鸟四级 |园豆:3438 | 2013-01-29 10:45

恩恩,记录用户的操作日志到数据库表?

NancyChan | 园豆:22 (初学一级) | 2013-01-29 11:01
其他回答(3)
0

其实你这个问题问的是控制反转,要实现你说的功能,我们通常是这样做的,比如页面A上有一个控件,它有三个事件A1,A1,A3,具体让在点它的时候执行哪个事件呢?

你可以在A前边加一个文本框,这里可以放要执行的事件名称(我只是打个比方,其实我们是根据选择的下拉列表(列表里放具体逻辑,比如税前工资,税后工资),然后根据选择的下拉列表,去DB里找对应要执行的事件,其实就返回一个string做为事件名称,事件确定了,具体怎么调用呢?

 

我们会将事先要执行的事件,编译成一个DLL,到时候去动态加载这个DLL,去执行某个方法..加载和执行的核心代码如下:

Assembly ab = Assembly.LoadFrom(file);

ab.CreateInstance("类名称")

MethodInfo OnShowDlg = t.GetMethod("方法名称");
            OnShowDlg.Invoke(ab, null);执行方法.

 

我们放在DB里配置的原因是,当点A要执行A2的时候,就把EventName改变成A2..然后它就会动态调用并执行了..

 

说了这么多..不知道是不是楼主想要的功能..

 

收获园豆:100
hexllo | 园豆:405 (菜鸟二级) | 2013-01-29 11:01

不是.....不过还是谢谢

支持(0) 反对(0) NancyChan | 园豆:22 (初学一级) | 2013-01-29 14:16
0

思路我有,不过不知道能不能帮助你,字典委托很简单

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConApp
{
    //动作,你要多少,自己加多少,记得初始化时间那里要加哦
    public enum ControlType
    {
        RecordEmployee,//1 加入相关员工
        RecordDutyEmployee,//2 加入负责员工
        ChangeAttribute//3 更改属性 对象/引用对象的属性
    }

    /// <summary>
    ///  成员管理(主要功能实现动态树控件数据)
    /// </summary>
    /// <Time>
    /// 2012/10/26 17:27
    /// </Time>
    /// <Author>
    /// Gerry.li(Gerry.li@Foxglobal.com)
    /// </Author>
    public class Control
    {
        /// <summary>
        /// 类型委托
        /// </summary>
        /// <param name="param">参数</param>
        /// <returns>返回值,就是你要的对象</returns>
        /// <Time>
        /// 2012/10/26 17:28
        /// </Time>
        /// <Author>
        /// Gerry.li(Gerry.li@Foxglobal.com)
        /// </Author>
        delegate object InvokeMethod(params object [] param);

        /// <summary>
        /// 字典委托
        /// </summary>
        /// <Time>
        /// 2012/10/26 17:28
        /// </Time>
        /// <Author>
        /// Gerry.li(Gerry.li@Foxglobal.com)
        /// </Author>
        Dictionary<ControlType, InvokeMethod> dicInvoke = new Dictionary<ControlType, InvokeMethod>();

        public Control()
        {
            dicInvoke[ControlType.RecordEmployee] = RecordEmployee;
            dicInvoke[ControlType.RecordDutyEmployee] = RecordDutyEmployee;
            dicInvoke[ControlType.ChangeAttribute] = ChangeAttribute;
        }

        public object ExcuteControl(ControlType controlType)
        {
            return dicInvoke[controlType].Invoke(controlType);
        }

        #region 操作实现
        private object RecordEmployee(params object[] param)
        {
            return null;
        }

        private object RecordDutyEmployee(params object[] param)
        {
            return null;
        }

        private object ChangeAttribute(params object[] param)
        {
            return null;
        }
        #endregion 操作实现
    }
}

ifecy | 园豆:265 (菜鸟二级) | 2013-01-29 17:18

只需要调用方面,参数是个枚举类型(包含你需要的所有操作的) ExcuteControl(ControlType controlType)

支持(0) 反对(0) ifecy | 园豆:265 (菜鸟二级) | 2013-01-29 17:20
0

要做工作流?还是什么?楼主的问题使人一头雾水

家中慢步 | 园豆:218 (菜鸟二级) | 2013-01-29 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册