繁体   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