gpt4 book ai didi

c# - 调用其他代码是否违反(SOLID)单一责任原则(SRP)?

转载 作者:太空狗 更新时间:2023-10-30 01:06:19 25 4
gpt4 key购买 nike

用业务逻辑考虑这个类:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com