c# – 在其他代码中调用(SOLID)单一责任原则(SRP)违规吗?
作者:互联网
考虑这个具有业务逻辑的类:
public static class OrderShipper
{
public static void ShipOrder(Order order) {
AuthorizationHelper.AuthorizedUser();
using (new PerformanceProfiler()) {
OperationRetryHelper.HandleWithRetries(() => ShipOrderInTransaction(order));
}
}
private static void ShipOrderInTransaction(Order order) {
using (var transaction = new TransactionHelper()) {
ShipOrderInternal(order);
transaction.Commit();
}
}
private static void ShipOrderInternal(order) {
// lots of business logic
}
}
该类包含一些业务逻辑,并执行一些横切关注点.虽然毫无疑问这个类违反了Open/Closed Principle,但这个类是否违反了Single Responsibility Principle?
我有点怀疑,因为类本身不负责授权用户,分析性能和处理事务.
毫无疑问,这是糟糕的设计,因为类仍然(静态地)取决于那些横切关注点,但仍然是:它是否违反了SRP.如果是这样,为什么会这样?
解决方法:
这是一个很好的问题,标题有点误导(你不可能在没有“调用其他代码”的情况下构建应用程序).请记住,SOLID原则比必须遵循的绝对规则更为准则;如果你把SRP用于其逻辑结论,那么每个类最终会得到一个方法.最大限度地减少交叉问题影响的方法是创建一个尽可能容易使用的外观.在你的例子中,你做得很好 – 每个横切关注只使用一行.
实现此目的的另一种方法是通过AOP,这可以通过使用PostSharp或IoC interception在C#中实现
标签:c,oop,design-patterns,design-principles 来源: https://codeday.me/bug/20190620/1244573.html