2008-08-21 5 views
8

, 그것은 권장 마무리, 기존의 소프트웨어 개발 methologies에 대한 설명, 그리고 민첩한 방법론의 후속 탄생에서 시작됩니다 소프트웨어 구성의 고유 한 변경 사항에 쉽게 적응할 수있는 유연한 응용 프로그램 아키텍처 설계애자일 아키텍처

제 질문은 그런 아키텍처에 어떤 패턴과 디자인 사례를 권하고 싶습니까? 의존성 주입과 같은 클래스 디커플링의 극대화, 높은 유지 보수 및 특정 문제의 최대 추상화를 허용하는 패턴에 관심이 있습니다.

답변

7

나는 다음과 같은 추천 :

  1. 저장소 패턴
  2. 사양 패턴
  3. 의존성 삽입 (Dependency Injection)
  4. 도메인 기반 디자인

ALT.NET의 우위를 설교 기본적으로 모든 것을.

2

확실히 IoC 관행과 계약 기반의 프로그래밍은 일반적으로 내 목록의 맨 위에 있습니다. 경험에 비추어 볼 때, 추상화를 위해 단순히 문제를 너무 많이 추상화하는 것에주의해야합니다. 예 : 왜냐하면 누구나 그 추상화를 사용할 수 있기 때문입니다. 그런 종류의 아키텍처가 나 빠졌고 단순히 시스템에 복잡성을 너무 높게 설정하여 시스템의 유지 관리를 악화시키는 것을 보았습니다.

단위 테스트, 연속 통합 및/또는 "스크럼"회의 등 개발 과정을 둘러싼 피드백 고리가 있습니다. 실제로 이것이 민첩한 "아키텍처"의 범주에 속하지는 않는다는 것을 알고 있습니다. 그러나 민첩한 프로세스가 없으면 민첩 지향 아키텍처가 중요하지 않습니다.

0

재미있는 질문입니다. 고립 된 아키텍처를 민첩하게 만들 수 있습니까? 우리가 XP와 같은 것을보고 있다면 나는 조금 의심 스럽습니다. 또는 어쩌면 내가 오해했습니다. 그러나 결코 저의 확장을 막지는 못합니다 ...

XP에서, 내가 알고있는 접근법을 취하기 위해, 우리는 아주 짧은 시간 내에 구조의 일종을 가질 것입니다. 프로젝트를 시작하십시오; 실제로 첫 번째 이야기가 완성되던 무렵입니다. 초기 스토리 작성 과정에서 우리는 우리가 구축 할 수있는 것에 대한 아이디어를 얻기 시작할 것입니다. 프로그래머는 코드 측면에서 생각하는 경향이 있습니다. 그러나 너무 멀리 생각하면 YAGNI 영토가됩니다.

민첩한 환경에서 개발 된 응용 프로그램 아키텍처의 상당 부분은 특히 중복 제거를위한 상수 및 전용 리팩터링을 통해 출시 될 것으로 예상됩니다.

아마도 민첩한 프로세스로 인해 진화 된 아키텍처가 표시되는 경향이있는 특정 특성 또는 특성 클래스가 있는지 평가하는 것이 중요합니다. 그리고 나는 그것이 어떤 종류의 앱을 만들지에 달려 있다고 생각한다. 이미 언급 된 몇 가지 원칙 (내가 이해할 수있는 몇 가지 사항)은 반드시 있어야한다.

0

내가 생각하는 한, 애자일은 "아키텍처"를 그렇게 설교하지 않습니다.민첩성 (Agile)은 프로젝트 관리, 릴리즈 사이클 및 일반적인 개발 업무에는 영향을 미치지 만 소프트웨어 아키텍처에는 영향을 미치지 않는 기본 원칙을 기반으로하는 방법론입니다.

여기에 나열된 모든 소프트웨어 패턴은 민첩한 개발을 저해하는 강력한 폭포 프로세스를 사용하여 사용할 수 있습니다. 당신이 있기 때문에, 요구 사항 및 디자인 결정의 변화 등이 ... 많은 일들이 "전통적인"방법에 싫은 내색을 것 리팩토링을 받아 채택 즉, 당신이 변화를 수용 민첩 수단을 인

0

작동/이전에 동의 한 것을 만지십시오.

XP와 같은 방법에서는 단위 테스트를 작성하여 품질을 높게 유지하려고 시도합니다. 우리 모두가 단위 테스트 작성에 동의 한 것처럼 보자.

이제 모든 시스템을 테스트 할 수있는 것은 아니므로 시스템이 테스트 가능하거나 테스트 친화적 인 아키텍처를 소개 할 수 있습니다. 예를 들어 중간 계층을 호출 할 수 있고 비즈니스 로직과는 별도의 UI 계층을 만들 수 있습니다.

2

아키텍처의 기능적 종단 간 구조를 먼저 작성하는 것이 좋습니다. 실제 피드백으로 가능한 한 빨리 검증하십시오.

이것은 Pragmatic Programmers가 "Tracer Bullets"라고 말한 것이며 Alistair Cockburn은 "walking skeleton"입니다.

에 응용 프로그램이 무엇인지 정의 할 수 있습니까? application software 또는 만 고려하면 더 복잡한 시스템을 처리 할 수 ​​있습니까?

0

로버트 마틴이 그것에 대해 (그리고 그는 IIRC 회의에서 원래의 애자일 선언문을 부름)라고 말하면, 절대적으로 아키텍처는 민첩성으로 모든 것을 갖추고 있습니다. 그의 책 Agile Software Development, Principles, Patterns, and Practices의 첫 번째 섹션은 SOLID 아키텍처 원칙에 관한 것입니다. 이것은 일부 분기에서 다소 논란의 여지가 있지만 왜 이해가되지 않습니다. 코드베이스가 부서 지거나 몹시 결합되어 있다면 변경하기가 매우 어렵습니다. 이것은 민첩성의 특징입니다. 개념적으로 코드 실행과 프로세스를 분리하는 것은 매우 민첩하지 못한 일입니다.

선언문의 원칙 1 : "우리는 프로세스와 도구에 대한 개인과 개입을 중요하게 생각합니다."

코드베이스의 아키텍처와 분리 된 추상적 인 애매한 "프로세스"를 정의하는 것은이 첫 번째 원칙의 정신에 위배됩니다.