2012-09-27 43 views
0

任何人都可以幫我解決這個問題。有三臺服務器。我想將作業分配給至少有Notstarted作業的服務器。我們想考慮已經開始的工作,而不是開始工作。我已經實現了這一點。但我的代碼非常冗長。我不知道如何在不改變我的概念的情況下最小化我的代碼。這裏是我的代碼:如何在不改變概念的情況下縮短我的代碼長度?

public List<int> GetPaServer() 
    { 
     List<int> PaServers = new List<int>(); 
     using (PaEntities pa = new PaEntities()) 
     { 
      var PaServer = from server in pa.AppPM_Pa_Server 
           where server.IsActive == true 
           select server.ServerId; 
      foreach (var paServer in PaServer) 
      { 
       PaServers.Add(paServer); 
      } 
     } 
     return PaServers; 
    } 


    //Method to get the serverid for each request. 
    public int GetPaQueue() 
    { 
     using (PaEntities server = new PaEntities()) 
     { 
      List<int> Paserver = new List<int>(); 
      Paserver = GetPaServer(); 
      string server1 = string.Empty; 
      string server2 = string.Empty; 
      string server3 = string.Empty; 
      foreach (int paserver in Paserver) 
      { 
       if (paserver == 1) 
       { 
        server1 = "active"; 
       } 
       else if (paserver == 2) 
       { 
        server2 = "active"; 
       } 
       else if (paserver == 3) 
       { 
        server3 = "active"; 
       } 
      } 
      int retVal = 0; 

      // Get the Server NotStarted details here 
      var NotStarted1 = (from serverID in server.AppPM_Pat 
           where serverID.Status == "NotStarted" && serverID.ServerId == 1 
           select serverID.ServerId).Count(); 
      var NotStarted2 = (from serverID in server.AppPM_Pat 
           where serverID.Status == "NotStarted" && serverID.ServerId == 2 
           select serverID.ServerId).Count(); 
      var NotStarted3 = (from serverID in server.AppPM_Pat 
           where serverID.Status == "NotStarted" && serverID.ServerId == 3 
           select serverID.ServerId).Count(); 

      // Get the Server Started details here 
      var server_Started1 = (from serverID in server.AppPM_Pat 
            where serverID.Status == "Started" && serverID.ServerId == 1 
            select serverID.ServerId).Count(); 
      var server_Started2 = (from serverID in server.AppPM_Pat 
            where serverID.Status == "Started" && serverID.ServerId == 2 
            select serverID.ServerId).Count(); 
      var server_Started3 = (from serverID in server.AppPM_Pat 
            where serverID.Status == "Started" && serverID.ServerId == 3 
            select serverID.ServerId).Count(); 

      //Get the server number for each request 
      //control comes here only when the server is active 
      if (server1 == "active" && server2 == "active" && server3 == "active") 
      { 
       if (NotStarted1 == 0 && NotStarted2 == 0 && NotStarted3 == 0) 
       { 
        if ((server_Started1 > server_Started2) && (server_Started1 > server_Started3)) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 0 && server_Started2 == 0 && server_Started3 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
        else if ((server_Started2 > server_Started1) && (server_Started2 > server_Started3)) 
        { 
         retVal = 1; 
        } 
        else if ((server_Started3 > server_Started1) && (server_Started3 > server_Started2)) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == server_Started2 && server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == server_Started3 && server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started2 == server_Started3 && server_Started1 == 0) 
        { 
         retVal = 1; 
        } 
       } 
       //control comes here only when the third server is active after some time 
       else if (NotStarted1 == NotStarted2 && NotStarted3 == 0) 
       { 
        if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 3; 
        } 
       } 
       else if ((NotStarted1 > NotStarted2) && NotStarted3 == 0) 
       { 
        if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 3; 
        } 
       } 
       else if ((NotStarted2 > NotStarted1) && NotStarted3 == 0) 
       { 
        if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 3; 
        } 
       } 
       //control comes here only when the first server is active after some time 
       else if (NotStarted2 == NotStarted3 && NotStarted1 == 0) 
       { 
        if (server_Started3 == 1 & server_Started2 == 1 & server_Started1 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       else if ((NotStarted2 > NotStarted3) && NotStarted1 == 0) 
       { 
        if (server_Started3 == 1 & server_Started2 == 1 & server_Started1 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       else if ((NotStarted3 > NotStarted2) && NotStarted1 == 0) 
       { 
        if (server_Started3 == 1 & server_Started2 == 1 & server_Started1 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       //control comes here only when the second server is active after some time 
       else if (NotStarted3 == NotStarted1 && NotStarted2 == 0) 
       { 
        if (server_Started3 == 1 & server_Started1 == 1 & server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
       } 
       else if ((NotStarted3 > NotStarted1) && NotStarted2 == 0) 
       { 
        if (server_Started3 == 1 & server_Started1 == 1 & server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
       } 
       else if ((NotStarted1 > NotStarted3) && NotStarted2 == 0) 
       { 
        if (server_Started3 == 1 & server_Started1 == 1 & server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 1 & server_Started2 == 1 & server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
       } 
       else if (NotStarted1 == 1 && NotStarted2 == 0 && NotStarted3 == 0) 
       { 
        if ((server_Started1 > server_Started2) && (server_Started1 > server_Started3)) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 0 && server_Started2 == 0 && server_Started3 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
        else if ((server_Started2 > server_Started1) && (server_Started2 > server_Started3)) 
        { 
         retVal = 1; 
        } 
        else if ((server_Started3 > server_Started1) && (server_Started3 > server_Started2)) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == server_Started2 && server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == server_Started3 && server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started2 == server_Started3 && server_Started1 == 0) 
        { 
         retVal = 1; 
        } 
       } 
       else if (NotStarted1 == 1 && NotStarted2 == 1 && NotStarted3 == 0) 
       { 
        if ((server_Started1 > server_Started2) && (server_Started1 > server_Started3)) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 0 && server_Started2 == 0 && server_Started3 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
        else if ((server_Started2 > server_Started1) && (server_Started2 > server_Started3)) 
        { 
         retVal = 1; 
        } 
        else if ((server_Started3 > server_Started1) && (server_Started3 > server_Started2)) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == server_Started2 && server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == server_Started3 && server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started2 == server_Started3 && server_Started1 == 0) 
        { 
         retVal = 1; 
        } 
       } 
       else if (NotStarted1 > NotStarted2 && NotStarted1 > NotStarted3) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         if (NotStarted2 > NotStarted3) 
         { 
          retVal = 3; 
         } 
         else 
         { 
          retVal = 2; 
         } 
        } 
       } 
       else if (NotStarted2 > NotStarted3 && NotStarted2 > NotStarted1) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         if (NotStarted1 > NotStarted3) 
         { 
          retVal = 3; 
         } 
         else 
         { 
          retVal = 1; 
         } 
        } 
       } 
       else if (NotStarted3 > NotStarted1 && NotStarted3 > NotStarted2) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         if (NotStarted1 > NotStarted2) 
         { 
          retVal = 2; 
         } 
         else 
         { 
          retVal = 1; 
         } 
        } 
       } 
       else if (NotStarted1 == NotStarted2 && NotStarted2 == NotStarted3 && NotStarted1 == NotStarted3) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       else if (NotStarted1 == NotStarted2 && NotStarted1 > NotStarted3 && NotStarted2 > NotStarted3) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 3; 
        } 
       } 
       else if (NotStarted2 == NotStarted3 && NotStarted2 > NotStarted1 && NotStarted3 > NotStarted1) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       else if (NotStarted1 == NotStarted3 && NotStarted1 > NotStarted2 && NotStarted3 > NotStarted2) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
       }      
      } 
      //control comes here only when server1 and server2 is active 
      else if (server1 == "active" && server2 == "active") 
      { 
       if (NotStarted1 > NotStarted2) 
       { 
        if (server_Started1 == 1 && server_Started2 == 1) 
        { 
         retVal = 2; 
        } 
       } 
       else if (NotStarted1 == NotStarted2) 
       { 
        if (server_Started1 == 0 && server_Started2 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started2 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started1 == 0 && server_Started2 == 1) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started2 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       else 
       { 
        if (server_Started1 == 1 && server_Started2 == 1) 
        { 
         retVal = 1; 
        } 
       } 
      } 
      //control comes here only when server3 and server2 is active 
      else if (server2 == "active" && server3 == "active") 
      { 
       if (NotStarted2 > NotStarted3) 
       { 
        if (server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 3; 
        } 
       } 
       else if (NotStarted2 == NotStarted3) 
       { 
        if (server_Started2 == 0 && server_Started3 == 0) 
        { 
         retVal = 2; 
        } 
        else if (server_Started2 == 1 && server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started2 == 0 && server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
        else if (server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
       } 
       else 
       { 
        if (server_Started2 == 1 && server_Started3 == 1) 
        { 
         retVal = 2; 
        } 
       } 
      } 
      //control comes here only when server1 and server3 is active 
      else if (server1 == "active" && server3 == "active") 
      { 
       if (NotStarted1 > NotStarted3) 
       { 
        if (server_Started1 == 1 && server_Started3 == 1) 
        { 
         retVal = 3; 
        } 
       } 
       else if (NotStarted1 == NotStarted3) 
       { 
        if (server_Started1 == 0 && server_Started3 == 0) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started3 == 0) 
        { 
         retVal = 3; 
        } 
        else if (server_Started1 == 0 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
        else if (server_Started1 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
       else 
       { 
        if (server_Started1 == 1 && server_Started3 == 1) 
        { 
         retVal = 1; 
        } 
       } 
      } 
      return retVal; 
     } 
    } 

回答

2

使用數組的數組,而不是重複相同的代碼爲每個服務器在牽着你的服務器,然後循環。在循環中你有一個服務器和它的索引,所以你可以在代碼周圍拷貝時只改變一個數字和服務器。沖洗並重復NotStarted和您爲每個服務器計算的其他值。

此外,它看起來像你的代碼中有一個展開的排序算法。如果將服務器及其NotStarted和其他計算值組合到結構中,則可以使用一組結構值,然後使用自定義排序函數對其進行排序。或者使用LINQ表達式。我距離我的開發PC還有7個小時,也許我今晚可以一起砍點什麼東西...

+0

我不明白你的意思。你可以請給一些更多的細節 – Karthi

+0

我會跳過這一點,只是指向一個很好的codereview答案:http://codereview.stackexchange.com/questions/15975/how-to-reduce-my-code-length-without - 改變概念 – lbruder

相關問題