使用SQL Server操作重构基于C#事件

本文关键字:事件 重构 SQL Server 操作 使用 | 更新日期: 2023-09-27 18:24:22

我不知道如何决定如何重构一些生产代码。这段代码的工作原理是从数据库中选择记录top 1,并决定在下面的列中包含值。

switch(column_value):
   case send_email:
        send_email.DoIt();
   case enable_somexx:
        enable_somexx.DoIt();
   case response_email:
        response_email.DoIt(); 

显示以下示例,为每个事件(记录)创建了类,包括DoIt()方法(SendMail、DecideMail、ResponseMail、MailXXX、enable_somexx)。这些类包括3个子文件夹操作,分别命名为action、decision、response(实际上这些类与其他类无关,因为代码选择了前1条记录)

我正在考虑这样重构这个代码逻辑:

  • 创建名为Behaviour的基类
  • 其他3个主要类将从此基类继承

代码:

public abstract Behaviour
{
     public virtual void DoIt(string type) {
     }
}
--Also another classes Decision, Response will inherit from Behaviour. 
public class Action : Behaviour
{
    override void DoIt(string type) {
    }
}
public class Email : Action 
{
    override void DoIt(string type)
    {
        if(type == SEND)
             call_sendmethod
        else if(xxx_operation_about_mail)
             call_xxx_operation_about_mail
    } 
}

但我无法处理(事实上,我不喜欢我的解决方案,因为我不想在每个操作(如EmailAction、EmailResponse、EmailDecision或其他操作)创建相同的类

如果你进行代码块重构,你会怎么做?

谢谢。

使用SQL Server操作重构基于C#事件

使用您的重构思想。。。这就是我的编码方式:

以下是一个概要:

  1. 为Behavior 创建一个抽象类

  2. 创建一个继承Behavior 的操作类

  3. 然后你可以用这样的代码来触发欲望"行动"。请注意我是如何覆盖"发送"行为以将其自定义为"特殊发送"的。

这是小提琴:https://dotnetfiddle.net/m3tjWl

区块报价

public class Program : Action
{
 public static void Main()
 {
    Console.WriteLine("Hello World");
    var command = Console.ReadLine();
    //trigger send from Action class
    Action x = new Action();
    x.DoIt(command);
    //trigger send from behavior class
    //the lines below are added to show how you can still access the parent behavior, remove or use where appropriate
    Behaviour y = x;
    y.Send();
 }
}
public abstract class  Behaviour 
{
    public virtual void Send()
    {
        Console.WriteLine("sent");
    }
    public virtual void EnableX()
    {
        Console.WriteLine("enabled");
    }
    public virtual void Reply()
    {
        Console.WriteLine("replied");
    }
    public abstract void DoIt(string type);
}
public class Action : Behaviour
{
 public override void DoIt(string type)
 {
    if(type.ToUpper() == "SEND")
        this.Send();
    else if (type.ToUpper() == "ENABLEX")
        this.EnableX();
    else if (type.ToUpper() == "REPLY")
        this.Reply();
    else
        Console.WriteLine("Unknown Command");   
 }
 new public void Send()
 {
    Console.WriteLine("Special Sent");
 }
}