5 c# generics code-reuse interface
我正在为我的应用程序处理异常处理层.
我读过很多关于接口和泛型的文章.我之前已经使用了很多遗产,我对那个领域很满意.
我有一个非常简短的设计,我将要实现:
public interface IMyExceptionLogger
{
public void LogException();
// Helper methods for writing into files,db, xml
}
Run Code Online (Sandbox Code Playgroud)
我有点困惑我接下来应该做什么.
public class FooClass: IMyExceptionLogger
{
// Fields
// Constructors
}
Run Code Online (Sandbox Code Playgroud)
我应该LogException()在其中实施方法FooClass吗?如果是的话,我正在努力想看看我如何更好地使用界面而不是具体的类......
我有各种各样的类可以使用该接口,但我不想在每个类中编写该接口的实现.
同时如果我在一个类中实现一个接口,然后在应用程序的不同层中使用该类,我将仍然使用具体的类而不是接口,这是一个糟糕的OO设计......
我希望这是有道理的.
欢迎任何反馈和建议.
请注意,我对使用net4log或其竞争对手不感兴趣,因为我这样做是为了学习.
谢谢
编辑:
写了一些代码.因此,我将实现各种与此接口,即记录仪的DBExceptionLogger,CSVExceptionLogger,XMLExceptionLogger等比我仍然会结束与具体的类,我将在我的应用程序的不同层使用.
您无法避免使用实现 IMyExceptionLogger 的具体类。但是,您可以阻止需要进行异常日志记录的类对这些具体类的依赖。这就是界面的用途。因此,您将记录器作为所有需要使用它的类的依赖项注入:
class MyClass
{
public MyClass(IMyExceptionLogger exceptionLogger)
{
....
exceptionLogger.LogException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以研究一些 IoC 容器(例如Unity)来帮助您更轻松地管理这些依赖项。