2009-04-16 9 views
1

에 화면이 희미하게 관련이있다 :추적 디자인 - 데이터베이스 추적

Should I design the application or model (database) first?

Design from the database first through to UI or t’other way round?

하지만 내 질문은 모델링 및 유물과 디자인을 할 수있는 올바른 방법에 대해 덜에 대한 자세한 내용입니다. 필자는 어떤 종류의 디자인 아티팩트가 기능 (사용 사례), 화면 및 데이터베이스 요소 (테이블 및 열, 특히) 간의 연결을 가장 잘 나타낼지를 파악하려고합니다. UML은 코드 중심적입니다. 데이터베이스 모델은 매우 데이터베이스 중심입니다. 그리고 화면 디자인의 UI 중심입니다!

여기 거래가 있습니다 ... 저희 팀은 제품의 첫 번째 출시를 위해 노력하고 있습니다. 유스 케이스를 사용한 다음 화면 디자인과 데이터베이스 디자인이이 두 가지 작업과 다소 격리되었습니다. 버그의 중요한 영역은 유스 케이스와 함께 제공되는 스크린과 데이터베이스 간의 추적 성의 부족이었습니다. 우리 제품에서는 유스 케이스와 데이터베이스 요소가 매우 겹치는 부분이 있습니다. 많은 유스 케이스가 데이터베이스 인프라의 75 % 이상을 차지합니다. 따라서 우리는 데이터베이스 설계 영역에 대해 많은 논쟁을 벌이고 있으며, 작은 데이터베이스 변경으로 인해 비즈니스 로직의 낮은 수준을 방해하기 쉽습니다.

다음 릴리스에서는 개발자와 DBA가 각 기능이 접촉하는 데이터베이스의 부분에 대한 명확한 통찰력을 갖기를 바랍니다. 유스 케이스/스크린 디자인 접근법은 잘 작동하므로 잘 보관하고 있습니다 ... 트릭은 각 유스 케이스와 스크린을 데이터베이스 모델에 연결하여 관계가 정말 분명하고 잊어 버릴 수 있도록합니다.

작은 프로젝트 (우리는 10 명에 불과하지만 종종 3 명 이하의 팀으로 작업했습니다)에서 디자인의이 부분을 보여주기 위해 자신 만의 다이어그램을 만들었습니다. Visio에서 실제 코드 또는 SQL에 대한 링크가없는 화면, UML 및 데이터베이스 테이블이 융합 된 정렬입니다. 최신 팀을 유지해야하는 큰 팀을 위해 잘 작동하는지, 데이터베이스 모델링 도구처럼 코드를 자동 생성하지 않는지 확실하지 않습니다.

어떤 권장 사항이 있습니까? 이것에 대해 일반적으로 받아 들여지는 메커니즘이 있습니까?

FYI - 우리는 꽤 빠르며, 곧 변경 될 것입니다. 그리고 우리는 유물을 좋아합니다 ... "민첩하게 전환"하는 것이 우리 그룹에게는 실행 가능한 솔루션이 아니라고 말합니다.

답변

0

유스 케이스는 좋은 출발점입니다.

  • 사용 사례를 실행 가능 테스트 코드로 변환하십시오. 이 테스트 코드 은 결과 값이 사용 사례의 요구 사항을 준수하는지 확인해야합니다. 당신이 응용 프로그램을 빌드 할 수 있습니다 더 강력한, 당신이 식별 할 수있는 작업 및 테스트의 부분

  • 작은.

  • 이 큰 부분 데이터베이스와 GUI의 와 유스 케이스의 상호 작용이 이해하기 간단 것을 의미합니다.

이 잠금 다운하는 여러 층의 완전한 선행 디자인 복잡한 프로젝트에서 아키텍처 또는 비즈니스 로직의 상호 작용을 어렵다.하나는 진정으로 당신이 요구 사항을 구현할 수있을 때만 당신의 요구 사항을 촉진 할 수있는 것에 대해 배웁니다.

개발자는 최상의 방법으로 작업을 수행하는 데 도움이되는 기술, 도구 및 프로세스를 찾아보십시오. 그들의 기원에 관해서는 판단하지 마십시오. 가능한 한 최고의 개발자가 될 수 있도록 가치를 판단하십시오.

민첩한 세계의 일부 항목은 분명 내 작업의 품질과 생산성에 큰 변화를 가져 왔습니다. 이것은 사과 카트를 버리고 숙련 된 폭포 팀을 혼란에 빠뜨릴 필요가 없습니다.

-1

데이터베이스는 문제 도메인을 모델링해야합니다. 그것을 완전히 모델링하여 솔루션 - 진리 -를 추출 할 수 있어야합니다. 나쁜 디자인은 본질적으로 데이터베이스에 "거짓"(잘못된 데이터 또는 관계의 가능성을 허용)하고, 데이터베이스에 "거짓말"하면 질문 할 때 "거짓말"합니다.

간단한 예제는 관계가 일대 다 일 수 있거나 값이 널이 될 수 없다거나 외래 키를 특성으로 취급 할 수있는 다 대 다 관계를 모델링하는 것입니다. 이들 중 많은 것들이 적절한 정규화에 의해 회피 될 수 있는데, 이는 당신이 명시 적으로 키가 무엇인지 아닌지를 알아 내야 만합니다.

모델에서 "불법 상태를 설명 할 수 없게 만드는 것"을 사용하면 불가능한 것이 테이블 구조 또는 선언적으로 설명 할 수 없게 만들어 지므로 불가능하다는 것을 확인하거나 관계가 가능하다는 것을 확인하는 "방어적인"코드를 작성하지 않아도됩니다 점검 제한 조건.

코드 작성 비용을 줄이기 위해 불가능한 부분을 지키지 않고 필요한 부분에 집중할 수 있습니다.

+0

이것은 데이터베이스 모델링을위한 훌륭한 조언이지만 내 질문에 대답하지 못합니다. 여기에 기능을 데이터베이스 요소에 연결해야합니다. 목표는 기본 데이터베이스 요소가 변경 될 때 어떤 기능이 영향을 받는지를 아는 것입니다. – bethlakshmi

3

사용 사례의 세부적인 내용을 질문 할 수 없습니다. 나는 그들이 높은 수준의 사용 사례를 될 수있는 인상을, 또는 관계를 확장 포함 아마도 통해 (예를 사용하여 상세히로 분류하지. 어떤 경우

, 나는 요구로 시작하는 것을 선호하고, 추적 사용 사례 및 유스 케이스 다이어그램을 작성하는 동안 도메인 모델 (상위 클래스 다이어그램)도 작성하고 있는데 이는 대부분 내게 이해 관계자와 논의 할 내용을 제공하기위한 것입니다 ("did 내가 맞습니까? ")

유스 케이스와 도메인 모델이 완성되면 화면 사이에 복잡한 상호 작용이있는 경우 화면 디자인 및 가능하면 활동 모델에 대한 작업을 시작할 수 있습니다. ould는 화면을 UI가있는 클래스처럼 취급합니다. 화면에는 FirstName 속성이있을 수 있습니다.이 속성은 내 도메인 모델의 Person 엔티티의 FirstName 속성과 관련되어 있음을 나타냅니다. 그러나 FirstName 속성은 해당 화면에서 텍스트 상자로 표시 될 수 있습니다.

동시에 물리적 데이터베이스 설계가 발생할 수 있습니다. 이렇게하면 클래스 모델 또는 ER 다이어그램이 생성되어 도메인 모델로 추적 할 수 있습니다. 결국 일부 화면 속성 또는 활동 모델링은 도메인 모델에없는 실제 데이터베이스 모델의 일부인 항목을 참조 할 수 있습니다. People "스키마의 Person 테이블에있는 계산 된 PersonalName 열에 화면"PersonalName "특성을 연결하는 것이 좋습니다.

내가 이런 종류의 도구에 사용하는 도구는 Sparx Enterprise Architect입니다. 이 도구는 훌륭한 도구이며 Professional Edition에서도이 모든 작업을 수행 할 수 있습니다.

진실을 위해서 내가 주로 스스로 모델을 만들었습니다. 모델, 코드 및 데이터베이스가 별도의 사람들에 의해 개발되는 프로젝트에서는 아직 작업하지 않았습니다.누군가 위의 내용이 "실생활"에서 작동하지 않는다고 말하면, 나는 그들을 믿어야 할 수도 있습니다. 나는 명확하게 질문을 이해하지만 몇 가지 합리적인 가정을 기반으로 대응하려고합니다 확실하지 않다

1

... 기본적으로

, 내 추천 존 손더스 이미 제안 된 것과 동일합니다 :에 좋은 UML 도구와 함께 UML을 사용하는 것을 고려하십시오. 그러나 귀하의 특정 상황에서 중요한 몇 가지 사항을 추가하고 싶습니다.

맨 먼저 맨 먼저 UML이 "코드 중심"이라고 생각하지 않습니다. 반대로, 거의 모든 추상 수준에서 소프트웨어 시스템의 거의 모든 측면을 모델링하는 데 사용할 수 있습니다. 좋은 도구 (Sparx EA와 같은)를 사용하면 UML의 장점은 실제로 잘 정의 된 모델을 얻을 수 있다는 것입니다 (연결되지 않은 그림/차트 세트와 대조적으로). 결과적으로, 도구 자체가 당신이 찾고있는 기능 (예 : DB에서 사용 사례까지 추적 가능)을 제공하지 않더라도 ... 최소한, 당신은 자동화 할 수있는 옵션을 가지고 있습니다 (또는 적어도 반자동 화) 예를 들어, UML 모델을 XMI (표준!)로 내 보낸 다음 거기에서 필요한 모든 추적 성 관련 정보를 얻을 수 있습니다 (예 : XSL 또는 원하는 프로그래밍/스크립팅 언어 용 XML 인식 라이브러리 사용) . 나는 쉽게 할 수 있다고 말하지는 않는다. (특히 개별 DB 컬럼의 레벨에 대한 추적 성을 원한다면 8-), 가능하다. 그리고 크기에 따라 확장해야한다면 수동 방법을 능가 할 가능성이 높다. 프로젝트.

BTW, Sparx EA 말하기 ... 아직 모든 기능을 알지는 못하지만 너무 많은 클래스가 있으므로 클래스를 선택할 수 없으면 놀라지 않을 것입니다. 클래스)를 사용하고 어떤 방식 으로든 그것에 의존하는 다른 모델 요소를 보여줍니다. 이것을 확인하고 싶을 수도 있습니다.

모든 것을, 당신이 적어도 UML에 대한 두 가지 중요한 문제를 다음과가있을 수 있음을 이해한다 가졌어요 :

  1. 당신이 원하는 것을 얻을 장소에 너무 많은 모델링 세부 사항을 필요로 나타날 수 있습니다 .
  2. "보편적 인 도구"와 마찬가지로 이미 사용하고있는 전문화 된 모델링 도구보다 크게 열세 인 것 같습니다.

문제 # 1 : 다시 한번 말하지만, 좋은 UML 도구를 사용하면 원하는 바로 가기를 얼마든지 할 수 있습니다. 예를 들어 유스 케이스에 대해 매우 자세하고 정확한 활동 모델을 작성하는 대신 유스 케이스에 관련된 클래스에만 집중할 수 있습니다 (클래스를 유스 케이스로 되돌릴 수있을 정도). 물론 UI에도 동일하게 적용됩니다.

문제 2 : 유스 케이스, UI 및 DB 스키마를 모델링하기 위해 현재 정확한 도구가 무엇인지 모르겠습니다. 따라서 이론적으로 UML보다 훨씬 뛰어나므로 쉽게 추적 할 수있는 기능을 제공하지 않을 수 있습니다. 그러나, (코드 생성 기능이있는) DB 모델링 도구가 진정으로 필수 불가결 한 것일 수도 있습니다. 그렇다면 UML 사용을 고려하는 것이 좋습니다. DB 스키마 수준으로 모델링하지 않고 도메인 모델 수준에서 "중지"하면됩니다 (응용 프로그램에없는 경우에도 마찬가지입니다). 이 시점에서 UML 도구는 도메인 모델 요소 (엔티티, 애트리뷰트 및 해당 관계)에서 유스 케이스 및 UI 요소로 다시 추적 할 수있게 해주고 도메인 모델과 DB 스키마 간의 매핑을 "대기 중" 대다수의 경우, 아무것도 그리지 않고도 추적 할 수있을 정도로 간단해야하기 때문입니다. 이것은 당신이 원하는 것의 100 %를 줄지는 못하지만 대부분의 문제를 완화하는데 충분할 80 %를 줄 수 있습니다.

결론 : 시스템의 세 가지 측면을 모델링하기 위해 세 가지 도구/기술을 사용하는 경우 ... 세 가지 측면의 추적 성은 이러한 세 가지 도구의 장점에 있습니다. 즉, 자동화 할 수 있습니다. 이러한 도구가 허용하는만큼만 사용할 수 있습니다 (아마도 많은 수작업 작업을해야 할 필요가 있습니다). 오늘날 UML은 모델을 연결하고 분석 활동의 상당 부분을 자동화 할 수있는 잘 정의되고 광범위하게 지원되는 "lingua 프랑 칸"으로 나타납니다. 대부분의 Visio 애드온과 스텐실과 같은 UML "just-drawing tools"를 진정한 UML 모델링 도구 (Sparx EA 및 다른 여러 제품)와 구별하십시오.