Redundanten Code reduzieren



  • Hey,

    ich habe viele Funktionen, die in etwa so aussehen:

    Handle h = null;
    try
    {
     h = Create();
    
     // Das ist bei den einzelnen Funktionen unterschiedlich
    
     h.DoSomething();
    }
    catch (Exception e)
    {
     MessageBox.Show(e.Message);
    }
    finally
    {
     if (h != null)
     {
      h.Close();
     }
    }
    

    Wie kann ich den Code reduzieren? Gibt es da einen Weg?
    Die Funktionen dienen zur Kommunikation mit einer Datenbank und sollen den Zugriff kapseln.

    Ich brauche dann z.B. nur Database.GetItems() aufrufen und erhalte ein Array mit den Daten.



  • Benutze das using Statement.



  • theta schrieb:

    Benutze das using Statement.

    Aber wie soll mir das helfen?

    Es geht darum, dass alle meine Funktionen dieses try-catch-finally Zeugs beinhalten. Ich dachte, ich könnte das irgendwie auslagern oder so. Aber da wüsste ich nicht wie ich das am besten machen soll...



  • wie theta gesagt hat:

    Wenn handle von IDisposable Ableitet kann man benutzen:

    using(Handle h = Create())
    {
    h.DoSomething();
    }
    was dann deinem Code entspricht

    Sonst versuche das handle in einer wieteren klassen zu wrappen, dessen destruktor dann das handle Disposed.



  • Na ja, gut. Aber das Exception-Zeugs brauche ich dann noch immer. Und das ist sehr nervig, wenn man so viele Funktionen hat, die auch dieses Zeugs brauchen...



  • dcssssss schrieb:

    Na ja, gut. Aber das Exception-Zeugs brauche ich dann noch immer.

    Wenn deine Exceptionbehandlung in der Regel wie in deinen obigen Fall aussieht, ist das ein Beispiel dafür, wie man es nicht macht. Entweder du kannst die Exception wirklich behandeln, oder du reichst sie durch (und Protokollierst maximal an oberster Ebene).



  • Es handelt sich eben um eine Anwendung mit GUI. Ich wüsste nicht, wo ich die Exceptions an zentraler Stelle abfangen und behandeln könnte. Das ist das Problem.



  • Ich wüsste nicht, wo ich die Exceptions an zentraler Stelle abfangen und behandeln könnte.

    jede software hat ne wurzel, falls nicht schmeiß das ding wech 😋



  • du Meinst sowas hier? Wo bei du evtl. zwcks dem Finally noch was anpassungen machen musst!!!

    class ExceptionHelper
    	{
    		public static T Check<T>(Func<T> del)
    		{
    			try
    			{
    				return del();
    			}
    			catch (Exception ex) 
    			{
                                    MessageBox.Show(ex.Message);
    				return default(T);
    			}
    		}
    
    		public static void Check(Action del)
    		{
    			Check<object>(() =>
    			{
    				del();
    				return null;
    			});
    		}
    	}
    

    So wir das ding verwendet:

    var h= ExceptionHelper(()=>
    {
       var tmp = Create();
       tmp.DoSomething();
    });
    
    if(h!=null)
    h.Close()
    


  • Sorry , so:

    var h= ExceptionHelper.Check(()=>
    {
       var tmp = Create();
       tmp.DoSomething();
    });
    
    if(h!=null)
    h.Close()
    


  • dcssssss schrieb:

    Na ja, gut. Aber das Exception-Zeugs brauche ich dann noch immer. Und das ist sehr nervig, wenn man so viele Funktionen hat, die auch dieses Zeugs brauchen...

    Dafür hat der liebe MSDN die Dokumentation erfunden...

    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(TopLevelErrorHandler);
                Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
    

    Zentraler gehts nimmer.


Anmelden zum Antworten