【发布时间】:2016-01-09 14:05:51
【问题描述】:
抱歉,帖子的标题太棒了。我有点想知道下面的问题是否有任何解决方案。情况是我有一个名为SaveSecurity(); 的函数,我需要在每个函数之后调用它。如下:
public void AddUser(string ID, string Name, string Password)
{
///some codes
SaveSecurity();
}
public void DeleteUser(User ObjUser)
{
///some codes
SaveSecurity();
}
public void AddPermission(string ID, string Name, AccessType Access)
{
///some codes
SaveSecurity();
}
public void DeletePermission(Permission ObjPermission)
{
///some codes
SaveSecurity();
}
public void AddRole(string ID, string Name)
{
Roles.AddRole(ID, Name);
SaveSecurity();
}
public void SaveSecurity()
{
///Saves the data
}
还有更多。所以现在如果我们看一下所有函数的相似之处是它最后在函数结束后调用SaveSecurity()。我的问题是:
有没有办法在每个函数之后调用这个函数而不用一遍又一遍地写同一行?
我的类图是这样的
【问题讨论】:
-
您可以考虑方面方法(例如 PostSharp),但即使在这种情况下,您也必须指定(例如通过属性)哪些方法应该调用
SaveSecurity... -
您可能想查看AOP。 .NET 世界中有几个 AOP 解决方案/框架,如 Spring.NET、PostSharp 和一些 IoC 容器。见stackoverflow.com/questions/633710/…
-
当然会想到 AOP,但我认为它是解决这个问题的错误工具,因为它不是另一个“关注”,例如日志记录。对我来说,SaveSecurity() 对方法很重要,应该直接放入其中...
-
@RicoSuter 如果它是必要的,那么不要通过将它移动到某个地方来自动化它,你可能会在它存在的时候“忘记”它。代码需要非常精确和清晰。而且我认为,如果它是函数的强制性部分,您要么每次都编写它,要么将它提取为一个辅助类并应用类似template method pattern
-
@RicoSuter:其实我同意你的看法。我无法说出这句话来形容它。感谢您的描述。 :)
标签: c#