Jus*_*tin 10
public abstract class MyBaseController {
public void Authenticate() { var r = GetRepository(); }
public abstract void GetRepository();
}
public class ApplicationSpecificController {
public override void GetRepository() { /*get the specific repo here*/ }
}
Run Code Online (Sandbox Code Playgroud)
这只是一些虚拟代码,它代表了我所拥有的一些真实代码(为简洁起见,这只是示例代码)
我有2个ASP MVC应用程序做了相当类似的事情.安全性/会话逻辑(以及其他事物)在两者中都是相同的.我已将两者的基本功能抽象为一个他们都继承的新库.当基类需要只能从实际实现中获取的东西时,我将它们实现为抽象方法.因此,在上面的示例中,我需要从数据库中提取用户信息以在基本库中执行身份验证.为了获得应用程序的正确数据库,我有一个抽象GetRepository方法返回应用程序的存储库.从这里开始,基地可以在repo上调用一些方法来获取用户信息并继续进行验证,或者其他任何方法.
当需要对身份验证进行更改时,我现在只需要更新一个lib而不是在两者中重复工作.所以简而言之,如果你想实现一些功能但不是全部,那么抽象类就可以很好地工作.如果要实现无功能,请使用接口.
public abstract class Request
{
// each request has its own approval algorithm. Each has to implement this method
public abstract void Approve();
// refuse algorithm is common for all requests
public void Refuse() { }
// static helper
public static void CheckDelete(string status) { }
// common property. Used as a comment for any operation against a request
public string Description { get; set; }
// hard-coded dictionary of css classes for server-side markup decoration
public static IDictionary<string, string> CssStatusDictionary
}
public class RequestIn : Request
{
public override void Approve() { }
}
public class RequestOut : Request
{
public override void Approve() { }
}
Run Code Online (Sandbox Code Playgroud)