用业务逻辑考虑这个类:
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 ,这在 C# 中可以通过使用 PostSharp 实现或通过 IoC interception
关于c# - 调用其他代码是否违反(SOLID)单一责任原则(SRP)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15925786/