문제

나는 다음과 같은 소프트웨어 디자인 원칙의 열렬한 팬입니다. 단단한 그리고 마른. OO 소프트웨어 설계에는 어떤 원칙이 존재합니까?

메모. 나는 "코드 주석"과 같은 답을 찾고있는 것이 아니라 대신 논의 된 것과 같은 oo 디자인 원칙을 찾고 있습니다. 밥 삼촌.

도움이 되었습니까?

해결책

Wikipedia의 상당히 포괄적 인 목록 :

http://en.wikipedia.org/wiki/list_of_software_development_philosophies

  • 민첩한 소프트웨어 개발
  • Agile Unified Process (AUP)
  • 행동 주도 개발 (BDD)
  • 전면의 큰 디자인 (BDUF)
  • 브룩스의 법칙
  • 성당과 바자회
  • 코드 및 수정
  • 건설 론자 설계 방법론 (CDM)
  • 카우보이 코딩
  • 맑은
  • 설계 중심 개발 (D3)
  • 자신을 반복하지 마십시오 (건조) 또는 한 번만 한 번 (Oaoo), 단일 지점 (스팟)
  • 동적 시스템 개발 방법 (DSDM)
  • 극단적 인 프로그래밍 (XP)
  • 기능 중심 개발
  • 할리우드 원리
  • 반복적이고 증분 개발
  • 공동 응용 프로그램 설계, 일명 JAD 또는 "공동 응용 프로그램 개발"
  • 카이젠
  • 칸반
  • 키스 원칙 (간단하게 유지, 바보)
  • 린 소프트웨어 개발
  • Microsoft 솔루션 프레임 워크 (MSF)
  • 모델 중심 아키텍처 (MDA)
  • 오픈 소스
  • 열린 통합 프로세스
  • 빠르고 더 이상
  • 합리적 통합 프로세스 (RUP)
  • 스크럼
  • 스마트 (민첩한 개발)
  • 우려 분리 (Soc)
  • 서비스 지향 모델링
  • 소프트웨어 장인 정신
  • 소프트웨어 시스템 안전
  • 나선형 모델
  • 시험 중심 개발 (TDD)
  • 통합 프로세스 (UP)
  • V- 모델
  • 폭포 모델
  • 바퀴와 스포크 모델
  • 더 나쁘다 (MIT 접근법과 대조되는 뉴저지 스타일)
  • xtreme
  • 당신은 그것을 필요로하지 않을 것입니다 (yagni)
  • Zero One Infinity

다른 팁

높은 응집력 - 디자인중인 모듈의 책임은 얼마나 집중되어 있습니까?

낮은 커플 링 - 모듈이 다른 모듈에 의존하는 정도.

상속에 대한 구성은 하나입니다.

많은 사람들, 특히 OO에 새로운 사람들은 구성을 사용하는 것이 실제로 필요한 수업을 확장하기 시작합니다. 실제로 당신이 스스로에게 물어봐야한다면, 새로운 클래스 B는 A 클래스 A입니까? 그렇지 않다면 확장해서는 안됩니다.

예를 들어, 내가 있다고 가정 해 봅시다 Person 클래스, a Car 수업, 그리고 나는 DrivenCar 수업. 순진한 구현은 말하는 것입니다 (우리가 여러 상속을 받았다고 가정 해 봅시다)

class DrivenCar extends Person, Car  { ... }

Drivencar는 사람의 유형입니까? 아니에요. 사람을 연장해서는 안됩니다. Drivencar는 차입니까? 예, 확장하는 것이 합리적입니다

조성을 사용하여 구현은 모양이 될 것입니다

class DrivenCar extends Car {
    private Person driver;
}

그만큼 파악 패턴. 예, 그들은 다소 사소한 것 같습니다. 더 많은 관련 패턴이 보여주는 핵심 특성으로의 증류와 비슷합니다.

상호 작용. 대부분의 설계 패턴은 인터페이스 및 구현의 분리를 기반으로합니다.

API가 성장할 것으로 예상되면 인터페이스 대신 추상 클래스를 사용하십시오. 인터페이스에 새 메소드를 추가하려면 구현하는 모든 클래스를 변경해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top