我有多门服务班。 每个班组都有一套相关的服务方法。 这些服务是利用IoC和建筑注射器进行的。
If I have two service classes that may, at times, need to call methods in the other, what is the best way to handle these in order to avoid circular references?
例如,从两个不同的服务类别(不一定是最实际的例子,但为了简单起见):
public class UserService
{
public void RegisterUser(User user)
{
// Do a bunch of stuff needed to register a user
// Now call out to permission service to set up basic permissions
_permissionService.SetUpBasicPermissions(user);
}
}
public class PermissionService
{
public void GrantPermission(User user, int PermissionId)
{
// Add user permission to database
// Now call out to user service to do some other stuff on the user
_userService.TakeActionsOnUserAccount(user);
}
}
以下是我可以看到的备选办法:
考虑到这两个部门之间需要共享功能,这是将服务类别合并为一个类别的一个标志。 如果情况是这样,我是否最终会有一个庞大的服务类别? 如何区分?
捐助将两个班子结合起来,但将具有逻辑性的方法移到自己的服务班级(在他们各自的班级中为用户和许可提供具体逻辑)。 如果是这样的话,我最后可能要提供这些共享服务,我认为这不是一件好事。
任何需要从一个部门到另一个部门的行动都应当移至呼吁守则。 这对我来说似乎有问题,因为我将消除可能依赖的逻辑,并使它成为另一个层次的关切。 换言之,我一直称之为“用户服务”。 注册用户(注册用户)——现在我总是必须称职。 SetUpBasicPermissions () Immediate following each calls.
Allow one service to call the other, but not both. If this is the case, which one do I choose? What do I do w/ the logic for the one that can t call the other?
利用代表将依赖性服务方法引入所谓的服务方法。 Bleh,这种声音是很荒谬的。
这些是我可以想象的,但我确信,有一些我looking。
Thoughts?
提前感谢。