2016-06-28 3 views
0

두 가지 방법으로 수업을 진행합니다. 앱을 실행하는 동안 Operations 클래스의 인스턴스를 매개 변수로 보냅니다. I 위에서 쓴 후 방법 로직이 변경 될 수 있기 때문에단일 책임 원칙 위반

public class Operations 
{ 
    /// <summary> 
    /// calculating the available money to use in operations 
    /// </summary> 
    void CalculateAvailableAmount(int x) 
    { 
     //making some calculation 
    } 

    /// <summary> 
    /// sharing some values between shareholders 
    /// </summary> 
    void Distribute(decimal total) 
    { 
     //making some calculation 
    } 
} 

은 (I 매개 변수로 인터페이스를 사용하여), I는 인터페이스를 사용한다 깨달았다.

public interface IOperations 
{ 
    void CalculateAvailableAmount(int x); 
    void Distribute(decimal total); 
} 

는하지만 나는 그것을 결정할 수 없습니다,이 두 가지 방법은 둘 다 이러한 값을 일부 값을 계산하고, 배포하고, 그러나 서로 의존하지 직접. 여기서 나는 두 가지 방법의 논리가 잠시 후에 바뀔 수 있다고 생각했다. 또한 아마 위의 10 가지 방법을 쓰겠습니다. SRP를 위반하는 것입니까? 관련 방법을 유지하는 것은 수업에서 더 좋은 생각이지만 SRP 원리를 위반할 수는 있지만 다른 한편으로는 좋습니다. 어떤 것을 구현하는 것이 더 낫습니까? 다른 클래스와 다른 인터페이스에있는 모든 메소드는 괜찮습니까?

답변

1

그것은 소리 감사합니다 같은 SRP하지 정말하지만, 코드를 구성하는 방법에 대한 자세한에 대해 당신이 관심이 무엇인지. 마치 코드 정리의 좋은 방법 인 함께 메서드를 구성하는 것처럼 보입니다. CalculateAvailableAmountDistribute이 논리적으로 또는 기능적으로 연결된 경우에는 내게 보인다. 그렇습니다. OOP 패러다임은 종종 그들이 조작하는 데이터를 기반으로 메소드를 구성해야하지만 논리 또는 함수로 구성하는 것도 유효합니다 (OOP가 아닐 수도 있음).

단일 책임 원칙은 매우 불투명하고 철학적 인 원칙입니다. 많은 사람들이 하나의 메소드/클래스/모듈이 얼마나 세밀하거나 거친 지 결정하는 데 어려움을 겪습니다. 다음은 그 자체의 생각에 불과하며 정확한 정의가 존재하지 않으므로 정확한 정의는 아닙니다.

엄밀히 말하면, 코드가 주변 코드와 독립적으로 변경 될 가능성이 높으면 모듈을 자체 모듈로 분리하는 것이 일반적이라고 생각합니다. 이것은 클래스 내의 메소드 또는 메소드 그룹을 의미하거나, 메소드 내의 코드 블록을 의미 할 수 있으며 심지어는 라이브러리를 분할 할 수도 있습니다.

SRP를 적용 할 때 일반적으로 두 가지 각도가 있다고 생각합니다.

YAGNI/DTSTTCPW 각도가 있습니다. SRP를 이해하기 전까지는 적용하지 않거나 100 %까지 SRP를 적용하면 향후 도움이됩니다. 예를 들어, 둘 중 하나 이상이 주변 코드와 비교하여 구현을 자주 변경한다는 것을 알게 될 때까지 동일한 클래스에서이 두 메소드를 유지하면서 실행합니다. 그 당시에는 SRP를 적용하여 이들을 분리하는 것이 합리적 일 수 있습니다. 그렇지 않을 수도 있습니다. 한 곳에서 코드를 유지하는 것이 SRP를 사용하여 다른 파일로 조각화하는 것이 더 유익합니다. 또는 여러 개발자가 동일한 모듈에서 작업 할 경우 SRP를 적용해야합니다. SRP 모듈을 SRP로 이해하면 서로의 발가락을 밟지 않아도됩니다.하지만 아마도 SRP와는 대조적으로 우려 사항이 더 많을 수도 있습니다.

또는 앞쪽 디자인 각도에서 올 수 있습니다 주변 코드와 관련하여 자주 변경 될 코드 블록을 추측하고 SRP를 코드 기반에 일찍 적용하십시오. 코드를 조각화하는 경향이 있다고 생각하기 때문에이 접근법 (특히 사내 코드에만 해당)에 대해 편향되어 있으며 개인적으로 조각화 된 코드를 유지 관리하기가 더 어려워합니다. 다른 사람들은 작은 비트의 코드를 이해하고 유지하기가 쉽다는 사실을 알고 있습니다.

어쨌든 조금 도움이 되었기를 바랍니다. 너무 매달리지 마십시오. SOLID 및 디자인 패턴은 문제를 해결하기위한 것입니다. 문제가 없다면 간단하게 유지하십시오.그리고 결국 문제가 생기면 리팩토링은 다음과 같습니다.

관련 문제