2015-08-28 35 views
2

我目前有我的主窗体在我的ObjectManager类中调用方法,它会从不同线程中的数据库中加载一些指定的数据(使用Task.Factory.StartNew()),然后引发一个事件让主窗体知道何时它完成后表单可以更新它的控件。更好的方法是使用一个参数或多个方法来创建一个泛型方法?

目前我让主窗体知道一个事件,该事件有一个参数传递给它,并发生了变化(机会/报价/作业等)。

我想知道为每种类型的改变创建单独的事件会更好吗?

DataChanged的EventArgs:

class DataChangedEventArgs : EventArgs 
{ 
    public String ObjectName { get; private set; } 

    public DataChangedEventArgs(String objectName) 
    { 
     ObjectName = objectName; 
    } 
} 

我的事件处理函数

private void dataChanged(object sender, DataChangedEventArgs e) 
    { 
     switch (e.ObjectName) 
     { 
      case "OpportunityList": 
       //Update Opportunity List 
       break; 

      case "Opportunity": 
       //Update single opportunity details 
       break; 

      case "QuoteList": 
       //Update Quote List 
       break; 

      case "QuoteDetails": 
       //Update single quote details 
       break; 

      case "JobDetails": 
       //Update job details 
       break; 

      case "OpportunityLogs": 
       //Do Stuff 
       break; 

      case "QuoteLogs": 
       //Do Stuff 
       break; 

      case "JobLogs": 
       //Do Stuff 
       break; 
     } 
    } 

编辑: 当事件被调用: 有多种方法与此类似的负载不同的东西/保存的东西,然后用不同的参数调用相同的事件。

class ObjectManager 
{ 
    public List<Opportunity> _opportunities; 

    public void loadOpportunityDetails(int _opportunityID) 
    { 
     int index = _opportunities.FindIndex(
       delegate(Opportunity opportunity) 
       { 
        return opportunity.opportunityID == _opportunityID; 
       }); 

     //Load details of the given opportunity 

     DataChangedEvent(this, new DataChangedEventArgs("OpportunityDetails")); 
    } 
} 
+1

你可以显示代码调用这个事件的地方吗? –

+0

如果为他们执行的动作不完全相似,我肯定会更喜欢他们采用不同的方法。即使这些操作非常相似,并且在一种方法中使用它们是合理的,但使用“Enum”会比字符串匹配更好。 – AndreySarafanov

+0

添加了该代码。在这个类中也有类似的功能,它们执行不同的操作,然后调用相同的事件,但它们都会加载“某些” – Blinx

回答

0

我肯定会修改调用,所以你不会传递魔术字符串,这是不必要的脆弱。

如果您对每个事件都有单独的方法,则维护,测试和调试将更加容易。

+0

然后发生不同的事件 – Blinx

相关问题