如何隔離物件之間的相依性

public interface IAccountDao
{
    string GetPassword(string id);
}

public interface IHash
{
    string GetHashResult(string password);
}

public class AccountDao : IAccountDao
{
    public string GetPassword(string id)
    {
        throw new NotImplementedException();
    }
}

public class Hash : IHash
{
    public string GetHashResult(string password)
    {
        throw new NotImplementedException();
    }
}

public class Validation
{
    private IAccountDao _accountDao;
    private IHash _hash;

    public Validation(IAccountDao dao, IHash hash)
    {
        this._accountDao = dao;
        this._hash = hash;
    }

    public bool CheckAuthentication(string id, string password)
    {
        // 取得資料中,id對應的密碼                       
        var passwordByDao = this._accountDao.GetPassword(id);

        // 針對傳入的password,進行hash運算
        var hashResult = this._hash.GetHashResult(password);

        // 比對hash後的密碼,與資料中的密碼是否吻合
        return passwordByDao == hashResult;
    }
}

 摘自:http://msdn.microsoft.com/zh-tw/library/dn148215.aspx

原文地址:https://www.cnblogs.com/sirkevin/p/3477811.html