2010-07-19 5 views
6

Mixins은 일반적으로 클래스에 새로운 동작을 도입한다는 것을 감안할 때 일반적으로 클래스에 두 가지 이상의 동작이 있음을 의미합니다.단일 책임 및 믹스

클래스에 단일 책임이있는 경우이 클래스는 변경 이유가 하나 뿐인 클래스로 정의됩니다.

그래서, 두 개의 서로 다른 관점

  1. 클래스는 변화를위한 하나의 이유가에서 이것을 볼 수 있습니다. 혼합 된 모듈에도 변경 이유가 하나뿐입니다. 클래스가 변경된 경우에만 클래스를 다시 테스트해야합니다. 모듈이 변경된 경우에만 모듈을 다시 테스트해야합니다. 따라서 SRP는 손상되지 않습니다.

  2. 클래스에는 이제 두 가지 변경 이유가 있습니다. 클래스가 변경되면 클래스와 모듈 모두 다시 테스트해야합니다. 모듈이 변경되면 클래스와 모듈 모두 다시 테스트해야합니다. Henge, SRP가 위반되었습니다.

은 유지 mixin의 사용은 Single Responsibility Principle 위반, 궁극적으로 더 열심히 유지하기 위해 시스템을 초래할합니까?

답변

1

는 관계없는 클래스들 사이에서 동작을 공유해야하는 경우 (언젠가 당신이 필요)는, 거기에 기본적으로 세 가지 옵션이 있습니다 :

  1. 복사 사방에 붙여 넣습니다. 이것은 DRY를 위반하고 유지 보수를 해칠 수 있습니다.
  2. 추상 클래스에 넣고 모든 클래스 (서로 관련성이없는 많은 클래스)에서 상속합니다. 이것은 일반적으로 OO 반 패턴으로 간주됩니다. 간단히 말해, 그것은 머리에 상속의 개념을 완전히 두 드린다. foo와 bar가 같은 것을하기 때문에, foo는 bar이라고 주장하지 않습니다.
  3. 다른 곳에 넣고 명확한 이름을 지정하고 필요한 모든 클래스에 혼합하십시오.

테스트에 관해서는 "좋은"믹스 인은 좋은 규칙적인 방법처럼 느슨하게 결합되어 있어야하며이를 사용하는 클래스는 독립적으로 사용할 수 있다고 주장합니다.

+0

관련없는 클래스간에 공유 동작이 필요한 경우 다른 클래스의 작업처럼 들립니다. 상속 또는 혼합이없는 인터페이스를 통해 관련없는 클래스간에 필요한 동작을 처리 할 수 ​​있습니다. 이것은 SRP와 DRY를 처리합니다. – Tek

-1

나는 그것에 동의 할 것이다. 그러나 SRP는 (때때로)을 위반할 수 있습니다.

1

믹스 인이라고 생각합니다. 그것은 아마도 추가적인 책임을 줄 수도 있지만, Ruby's Comparable과 같은 것들은 SRP를 위반하지 않는다고 말할 수있는 꽤 낮은 수준의 기능을 제공합니다.

1

Mixins는 일반적으로 클래스에 새로운 동작을 도입한다는 것을 감안할 때 일반적으로 클래스는 둘 이상의 동작을 포함한다는 것을 의미합니다.

그렇다면 단일 (구현) 상속에서도 똑같이 적용됩니다. 누구도 23 단계의 상속 계층을 더 이상 좋아하지 않지만 여전히 그 곳이 있습니다.

상속이 SRP를 손상시키지 않는 이유는 그것이 이야기하고있는 클래스가 더 추상적 인 것이 아니라 문자 코드 파일이라는 의미의 클래스라는 것입니다. 이 파일은 기본 클래스 코드 파일을 변경하면 일반적으로 변경할 필요가 없습니다.

변경 이유는 하나뿐입니다.

관련 문제