1

我无法用英语解释我的问题。所以让我展示一下我的情况。

// 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);
    }
}

现在我有另一个子项目。我需要在那里使用服务类。所以我希望使服务类独立于用户类。

我怎么做?

我只有以下解决方案。有什么绝妙的办法吗?

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())
    }
}
4

2 回答 2

1

是的,有几个允许解耦组件的最佳实践,它们被称为设计模式。我建议查看所有这些,以确定哪一个最适合您的上下文。它们各有优缺点、适用范围和影响。没有一种出色的解耦解决方案。

我认为命令模式可能适合您的问题。

请参阅: http: //www.dofactory.com/net/design-patternshttps://csharpdesignpatterns.codeplex.com

于 2017-01-16T12:04:10.820 回答
1

这取决于您在服务中使用“用户”。您可以在 Common 项目中添加一个接口 IUser,并让 User 实现它。

然后在另一个子项目中,编写 UserSub : IUser ,它也实现了接口 IUser。

这样服务是独立的,但您仍然必须在每个使用服务的项目中实现一些东西。(无论如何您都需要这样做,因为 Service 当前将其用作内部变量。

于 2017-01-16T11:54:03.543 回答