이것은 매우 기본적인 물건입니다. 그러나 여기에 있습니다. 나는 내가 자신이 큰 클래스를 작은 것들로 나누는 방법이 인지에 대해 결코 동의 할 수 없다는 것을 알게되었다. 일들을 유지 보수가 용이하거나 유지하기가 더 어렵게 만든다. 나는 디자인 패턴에 익숙하지만, 상세하지는 않지만 의 객체 지향 디자인의 개념도 있습니다. 모든 멋진 규칙과 지침은 제쳐두고, 아주 간단한 샘플 시나리오로 내가 놓친 것에 관해서 당신의 두뇌를 선택하려고합니다. 본질적으로 다음과 같은 라인을 따라 : "...이 디자인은 더 어렵게 만들 것입니다", 등등 ... 나는 경험의 부족으로 인해 본질적으로 기대하지 않는 모든 것들.코드를 구성 요소로 분할하는 방법 ... 큰 클래스? 작은 수업?
특정 파일 형식을 처리하기 위해 기본적인 "파일 판독기/파일 작성기"스타일 클래스를 작성해야한다고 가정하면 파일을 YadaKungFoo 파일이라고합시다. YadaKungFoo 파일의 내용은 본질적으로 INI 파일과 유사하지만 미묘한 차이가 있습니다.
섹션 및 값이있다 :
[Sections]
Kung,Foo
Panda, Kongo
[AnotherSection]
Yada,Yada,Yada
Subtle,Difference,Here,Yes
[Dependencies]
PreProcess,SomeStuffToPreDo
PreProcess,MoreStuff
PostProcess,AfterEight
PostProcess,TheEndIsNear
PostProcess,TheEnd
OK 그래서 이것은 3 개 기본 클래스를 생성 할 수있다하십시오 ToString() 재정의로
public class YadaKungFooFile
public class YadaKungFooFileSection
public class YadaKungFooFileSectionValue
두 후자 클래스는 필수적으로 데이터 구조 두 개의 일반 목록을 사용하여 저장된 값의 문자열 목록을 뱉어 내십시오. 이것은 YadaKungFooFile 저장 기능을 구현하기에 충분합니다.
시간이 지남에 따라 YadaYada 파일이 커지기 시작합니다. 여러 가지 오버로드가 XML 등을 포함한 다양한 형식으로 저장되며 파일은 800 줄 정도가됩니다. 이제 진짜 질문 : YadaKungFoo 파일의 내용을 검증하는 기능을 추가하고 싶습니다. 가장 먼저 생각해보아야 할 것은 분명히 다음과 같습니다.
var yada = new YadaKungFooFile("C:\Path");
var res = yada .Validate()
이제 완료되었습니다 (생성자에서 해당 메소드를 호출 할 수도 있습니다). 이제이 샘플 분명히 정말 간단하고 사소한 볼품입니다
var yada = new YadaKungFooFile("C:\Path");
var validator = new YadaKungFooFileValidator(yada);
var result = validator.Validate();
: 문제는, 검증은 매우 복잡하고, 클래스가 매우 큰 수, 그래서 우리는이 같은 새로운 클래스를 생성하기로 결정. 아마 위의 두 가지 방법 중 하나를 너무 많이 차이가 있지만, 내가 좋아하지 않는 것은하지 않습니다
- YadaKungFooFileValidator 클래스와 YadaKungFooFile 클래스는 매우 강하게이 디자인에 의해 결합 될 것 같다 . 한 클래스에서 변경된 것처럼 보이고 다른 클래스에서 변경을 트리거 할 가능성이 있습니다.
- "Validator", "Controller", "Manager"등과 같은 문구는 "자체 사업"과 반대되는 다른 대상의 상태와 관련된 클래스를 나타내며 따라서 분리를 위반한다는 것을 알고 있습니다. 관심 원칙 및 메시지 전송
나는 디자인이 왜 나쁜지에 대한 모든 측면을 이해할 수있는 경험이 없다고 생각합니다. 어떤 상황에서 실제로는 중요하지 않으며 관심사에는 더 많은 무게가 있습니다. 수업 또는보다 응집력있는 수업. 그들은 모순적인 요구 사항 인 것 같지만 아마도 틀 렸습니다.어쩌면 유효성 검사기 클래스는 복합 개체 여야합니까?
본질적으로 위의 설계로 인해 발생할 수있는 이점/문제에 대한 의견을 묻습니다. 다르게 할 수있는 일은 무엇입니까? (기본 FileValidator 클래스, FileValidator 인터페이스 등 .. 이름은 그것). YadaKungFooFile 기능은 시간이 지남에 따라 계속 증가하고 있다고 생각하십시오.
"클래스의 크기가 걱정 스럽다고 생각하지 않습니다." 이론적으로 나는 동의하고 싶다. 실제로 나는 내가 좋아하는 2,000 개 이상의 라인을 가진 수업을 본 적이 없다. – PeterAllenWebb
@PeterAllenWebb ... 동의합니다. 그러나 LOC의 수는 결정적인 요소가 아니어야합니다. 클래스의 의미가 클래스가 한 가지 또는 두 가지 이상의 것에 관련되어 있는지 판단하는 데 도움이됩니다. 실제로 대부분의 수업은 작을 것입니다. –
@ Vincent Ramdhanie LOC는 냄새의 정말 좋은 지표입니다. 나의 일반적인 규칙은 입증 된 무고한 500 LOC 클래스까지 –