簡體   English   中英

C#松耦合

[英]C# Loose coupling

我無法用英語解釋我的問題。 所以讓我展示一下我的情況。

// in Main Project
public class User
{
    public int version
    {
        get;
        set;
    }
}


// in Common Project
public class Service : BaseService
{
    User _user;
    public void SetVersion(int versionID)
    {
        _user.version = versionID;
    }

    public bool HasMessage()
    {
        return GetMessage(user.version);
    }
}

現在我有另一個子項目。 我需要在那里使用Service類。 所以我希望使Service類獨立於User類。

我怎么做?

我只有下面的解決方案。 有什么好辦法嗎?

public class Service : BaseService
{
    Action<int> _getCallBack;
    Func<int> _setCallBack;

    public Service(Action<int> getCallback, Func<int> setCallBack)
    {
        _getCallback = getCallback;
        _setCallback = setCallback;
    }

    public void SetVersion(int versionID)
    {
        setCallback(versionID);
    }

    public bool HasMessage()
    {
         return GetMessage(getCallback())
    }
}

這取決於您在服務中對“用戶”的使用。 您可以在Common項目中添加接口IUser,並讓User實施它。

然后在另一個SubProject中,編寫UserSub:IUser,它也實現了接口IUser。

這樣,Service是獨立的,但是您仍然必須在每個使用Service的項目中實現一些功能。 (無論如何,您都需要這樣做,因為Service當前將其用作內部變量。

是的,有幾種允許對組件去耦的最佳實踐,它們被稱為設計模式。 我建議看一下所有這些,以決定最適合您的情況。 它們都有優點和缺點,應用范圍和影響。 沒有一種出色的解耦解決方案。

我認為命令模式可以解決您的問題。

請參閱: http : //www.dofactory.com/net/design-patternshttps://csharpdesignpatterns.codeplex.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM