一個簡單的面試問題。 接口如何幫助代碼的可重用性?接口如何促進代碼的可重用性?
回答
的接口從一個類的實現細節解耦消費者。這有助於實現可重用性,因爲實現接口的類可以更改,而無需更改使用實現的代碼。
這是非常令人困惑,也許一個例子有助於
public interface IUserAuthentication
{
public bool Authenticate(string name, string password);
}
現在,我會寫的消費者來說,並不關心如何進行身份驗證,它只是知道它可以驗證用戶身份。
public class Consumer
{
private IUserAutentication _auth;
public Consumer(IUserAuthentication auth)
{
_auth = auth;
}
public void Working(string username, string password)
{
if (!_auth.Authenticate(username, password))
{
throw new Exception("error!");
}
}
}
無論IUserAuthentication服務的實現如何,上面的代碼都可以工作。這是重用代碼的一種方法。
現在我可以實現IUserAuthentication接口
public class AuthenticateJasons : IUserAuthentication
{
public bool Authenticate(string username, string password)
{
return username == "Jason";
}
}
public class AuthenticateNoone: IUserAuthentication
{
public bool Authenticate(string username, string password)
{
return false;
}
}
的一點是,這些實現都無關緊要,只要消費者來講。此外,這個問題與ASP.NET Web框架無關。這實際上是一個語言/平臺/框架不可知論的問題。無論您選擇實施哪種語言,答案都是一樣的。
這是開放和封閉原則,S.O.L.I.D原則的重要法則之一。
它的想法很容易改變現有代碼的最小變化。最終有助於單元測試。
interface
允許的數量你分開調用類關心的信息化實施。這使您可以將您的課程從親密的知識中解脫出來。
鑑於以下interface
:
public interface IRepository<T> {
void Save(T entity);
void Update(T entity);
void Delete(T entity);
}
從屬類可以針對被編程所述接口,並從細節的「屏蔽」。
public class SomeService {
private IRepository<Contact> _contactRepo;
public SomeService(IRepository<Contact> contactRepo){
_contactRepo = contactRepo;
}
}
利用這種模式,您可以創建的不同實現上述接口:
public class LinqToSqlRepository<Contact> : IRepository<Contact>
{ /* ... */ }
public class EntityFrameworkRepository<Contact> : IRepository<Contact>
{ /* ... */ }
public class NHibernateRepository<Contact> : IRepository<Contact>
{ /* ... */ }
+1 - 你找到了工作! – 2012-02-14 05:09:26
非常感謝@xander – 2012-02-14 05:33:44
- 1. 促進這種情況下的代碼重用
- 2. 用於促進小窗口
- 3. 檢查促銷代碼有效性?
- 4. 如何測試優惠券/促銷代碼的唯一性?
- 5. 如何更改「有促銷代碼?」
- 6. 接口(作爲多重繼承的替代品)如何實現代碼重用
- 7. 樣式中的代碼可重用性
- 8. 測量代碼的可重用性
- 9. Android的促銷代碼
- 10. ATL COM - 如何重新使用接口方法代碼
- 11. WPF代碼應該如何實現嵌套的可重用性
- 12. 促進開放源碼
- 13. 如何在Flash中進行開發人員可擴展性和代碼重用?
- 14. 多個促銷代碼
- 15. Google Play促銷代碼
- 16. WCF代碼中屬性的位置?接口或代碼
- 17. 如何處理「粗魯」的應用商店促銷代碼..?
- 18. 如何格式化正常jQuery代碼可重用的代碼
- 19. ,促進
- 20. 我如何使此代碼可重用?
- 21. VB.NET代碼重新排序到接口
- 22. App Store促銷代碼何時生效?
- 23. 我可以重寫接口屬性嗎?
- 24. iTunes促銷代碼和應用更新
- 25. 應用程序促銷代碼到期
- 26. C#接口如何隱藏代碼
- 27. 如何在編寫接口時避免重複代碼?
- 28. 如何重寫下面的代碼使其更具可測性?
- 29. 如何在下面的代碼中進行代碼重構?
- 30. 在接口繼承中使用Java泛型進行代碼重用
非常感謝@Jason – 2012-02-14 05:33:30