나는 오랜 개발자 (나는 49입니다)이지만 객체 지향 개발에 익숙하지 않습니다. Bertrand Meyer 's Eiffel 이후 OO에 대해 읽었지만 OO 프로그래밍은 거의하지 않았습니다.
요점은 OO 디자인에 대한 모든 책은 보트, 자동차 또는 우리가 자주 사용하는 일반적인 객체의 예로 시작하며 속성과 메소드를 추가하고 객체의 상태를 모델링하는 방법과 수행 할 수있는 것을 설명하기 시작합니다 그것.
따라서 일반적으로 "모델이 좋을수록 응용 프로그램의 객체를 더 잘 표현하고 더 잘 나옵니다"와 같은 방식으로 진행됩니다.
지금까지는 좋지만 다른 한편으로,“클래스는 한 페이지에 맞아야합니다”와 같은 레시피를 제공하는 여러 저자를 발견했습니다 (이제“어떤 모니터 크기에 추가 하시겠습니까?”). 코드를 인쇄하십시오!).
예를 들어 PurchaseOrder유한 상태 머신이 동작을 제어 하는 클래스와의 컬렉션 을 예로 들어 보겠습니다. PurchaseOrderItem여기서 논란 중 하나는 PurchaseOrder일부 메소드 (데이터 클래스가 아닌)와 함께 간단한 클래스를 사용해야한다는 것입니다. PurchaseOrderFSM"전문가 클래스"를 위해 그 핸들 유한 상태 기계를 PurchaseOrder.
나는 그것이 코딩 호러에 관한 Jeff Atwood의 Code Smells 포스트 의 "Feature Envy"또는 "Inappropriate Intimacy"분류에 해당한다고 말하고 싶습니다 . 그냥 상식이라고 부릅니다. 실제 구매 주문을 발행, 승인 또는 취소 할 수있는 경우 PurchaseOrder클래스 issuePO에 approvePO및 cancelPO메소드 가 있어야 합니다.
OO의 초석으로 이해하는 "통합 최대화"및 "커플 링 최소화"시대의 오래된 원칙과 함께 사용되지 않습니까?
게다가, 그것은 클래스의 유지 보수에 도움이되지 않습니까?
PurchaseOrder, 당신은 당신의 방법을 이름을 수issue,approve및cancel.PO접미사은 음의 값을 추가한다.