このクラスをビジネス ロジックで考えると、次のようになります。
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
}
}
このクラスにはいくつかのビジネス ロジックが含まれており、いくつかの分野横断的な問題も実行されます。このクラスがオープン/クローズドの原則に違反していることは間違いありませんが、このクラスは単一責任の原則に違反していますか?
クラス自体は、ユーザーの承認、パフォーマンスのプロファイリング、およびトランザクションの処理を担当していないため、私には疑問があります。
クラスはまだ(静的に)これらの分野横断的な懸念に依存しているため、これが貧弱な設計であることに疑いの余地はありませんが、それでも:SRPに違反していますか?もしそうなら、これはなぜですか?