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 class 。
所以我希望服务 class 独立于用户 class.
我该怎么做?
我只有以下解决方案。有什么高明的方法吗?
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())
}
}
这取决于您在服务中使用'User'。
可以在Common项目中添加接口IUser,让User实现。
然后在另一个子项目中,写 UserSub : IUser 也实现了接口 IUser.
那样 Service 是独立的,但是您仍然需要在每个使用 Service 的项目中实现一些东西。 (无论如何你都需要这样做,因为服务目前将它用作内部变量。
是的,有几种允许解耦组件的最佳实践,它们被称为设计模式。我建议您查看所有这些内容,以决定哪一个最适合您的情况。它们各有优缺点、适用范围和影响。解耦没有绝妙的解决方案。
我认为命令模式可以解决您的问题。
参见:http://www.dofactory.com/net/design-patterns
和 https://csharpdesignpatterns.codeplex.com
我无法用英语解释我的问题。所以让我展示一下我的情况。
// 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 class 。 所以我希望服务 class 独立于用户 class.
我该怎么做?
我只有以下解决方案。有什么高明的方法吗?
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())
}
}
这取决于您在服务中使用'User'。 可以在Common项目中添加接口IUser,让User实现。
然后在另一个子项目中,写 UserSub : IUser 也实现了接口 IUser.
那样 Service 是独立的,但是您仍然需要在每个使用 Service 的项目中实现一些东西。 (无论如何你都需要这样做,因为服务目前将它用作内部变量。
是的,有几种允许解耦组件的最佳实践,它们被称为设计模式。我建议您查看所有这些内容,以决定哪一个最适合您的情况。它们各有优缺点、适用范围和影响。解耦没有绝妙的解决方案。
我认为命令模式可以解决您的问题。
参见:http://www.dofactory.com/net/design-patterns 和 https://csharpdesignpatterns.codeplex.com