事件(对象/相关对象,增删改)-->触发-->动作
动作包括1 加入相关员工
2 加入负责员工
3 更改属性 对象/引用对象的属性
大概需求是这样的,在后台设置事件逻辑后,前台相关操作触发按照设置预定义的相应的响应
是不是需要设计单独的表来保存这些设置信息??还有怎么让它们自动同步啊,木有思路.....求指点...(头回提问...好紧张.....)
建立一张表来存放这些日志即可
你在你的业务逻辑层的对象里都实现一个接口,这个接口包含你需要触发的事件
然后调用这个对象时触发这个事件把记录添入表中
恩恩,记录用户的操作日志到数据库表?
其实你这个问题问的是控制反转,要实现你说的功能,我们通常是这样做的,比如页面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..然后它就会动态调用并执行了..
说了这么多..不知道是不是楼主想要的功能..
不是.....不过还是谢谢
思路我有,不过不知道能不能帮助你,字典委托很简单
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 操作实现
}
}
只需要调用方面,参数是个枚举类型(包含你需要的所有操作的) ExcuteControl(ControlType controlType)
要做工作流?还是什么?楼主的问题使人一头雾水