2009-04-01 2 views
4

나는이 토론에 상당히 익숙하지 만 나는 '무지한'소리를 낼 위험이 있더라도이 질문을해야한다. 왜 우리는 이제 'DDD'에 너무 많은 스트레스를 받는지? 'DDD'를 자세히 살펴볼수록 애플리케이션이 복잡해집니다. 반면 데이터베이스를 사용하여 내 도메인을 모델링하면 응용 프로그램이 여러 계층에서 일관되게 유지됩니다. 그런 다음 SubSonic 또는 L2S와 같은 DAL Helpers를 사용하여 해당 모델에 쉽게 액세스 할 수 있습니다. 이것에 대해 그렇게 나빠요? 엔터프라이즈 애플리케이션에서도?ERD를 사용하여 도메인을 모델링 할 수없는 이유는 무엇입니까?

우리는 왜 우리가 시도하고 테스트 한 도메인을 모델링하는 새로운 방법을 만들려고 노력합니까?

나는 여기 순수 주의자의 말을 기꺼이 듣고 있습니다.

답변

4

이것은 실제로 정말 훌륭한 질문이며, 짧은 대답은 "할 수 있습니다."입니다. 우리는 그랬던 것처럼 엔터프라이즈 (데이터) 모델링의 전체 영역이있었습니다. 실제로 일반적인 OOD 표기법은 ERD에서 발전했습니다.

그러나 우리가 발견 한 것은 데이터 기반 디자인에는 약간의 어려움이있었습니다. 가장 큰 점은 데이터베이스의 자연스러운 구조가 코드의 자연스러운 구조와 반드시 일치하지 않는다는 것입니다.

  • 가 쉽게해야한다 디자인
  • 에서 생각하는 :

    짐 우드, 크게, 바람직한 특성의 몇 가지는 코드 구조를 찾기 쉽게하기 위해 욕망에서 파생 변화에 강해야합니다.

디자인을 쉽게 생각할 수있는 것은 원래 시뮬레이션의 "대상"으로 생각했던 Simula에서 비롯된 것입니다. 시뮬레이션에서 당신이 시뮬레이션하고있는 것에 상응하는 소프트웨어 엔티티를 갖는 것이 편리했습니다. Xerox의 Alan kay et al이 그것을보다 일반적인 구조화 방법으로 본 것은 나중에였습니다.

변경 사항에 대한 견고성에 대한 부분은 많은 부모가 있었지만 그 중 가장 중요한 것 중 하나는 Dave Parnas였습니다. 모듈화에 대한 기본 규칙을 식별하는 몇 가지 논문을 썼습니다.이 규칙은 Parnas의 법칙이라고합니다. 비밀, 그리고 그 비밀은 변할 가능성이있는 요구 사항입니다.

그것은 현실 세계 식별 할 수있는 일에 해당하는 등의 "개체"의 시뮬 아이디어와 파르 나스 '법을 결합하여, 당신은 요구 사항의 변화에 ​​따라보다 강력한있는 시스템 설계를 얻을 수 경향 밝혀 우리가 옛날 방식으로했던 것보다. (아니 항상, 언젠가 당신은 명령 패턴으로, 교활해야합니다. 대부분의 객체는 지속적인 존재를 가지고 명사 것입니다. 명령 패턴에 이상 물체가 동사, 당신이일을.)

그러나 구조가 관계형 데이터베이스의 기본 데이터를 나타내는 데 반드시 필요한 것은 아니므로 "객체 관계형 임피던스 불일치"문제가 발생합니다. 즉, 변환을 나타내는 방법 오브 랜드 랜드에서 데이터베이스 랜드로

+0

+1 좋은 답변 – dwc

5

너무 많은 프로젝트가 실패하고 어쨌든 너무 많은 사람들이 이전 방법론을 알고 있기 때문에 오래된 방법론을 판매 할 수 없습니다. 시장에 내놓을 새로운 것이 있어야합니다.

옛날 방식으로 잘 해내면 작동하는 것을 사용하십시오. 새로운 아이디어에주의를 기울이십시오. 정말 멋진 아이디어가 있습니다. 그러나 그것이 모든 것이 오래되고 나쁘다는 것을 의미하지는 않습니다. 일반적으로 새로운 아이디어를 이전 모델에 상당 부분 통합 할 수 있습니다.

여기 이됩니다. 마찬가지로 구조체와 함수 포인터로 OOP를 수행하지 않을 것입니다. ;-)

+0

+1 "이전 방법을 팔 수 없습니다." – ObiWanKenobi

3

짧은 대답 : 사용자가 데이터를 편집 할 수있는 CRUD 시스템이 필요한 경우 백 엔드 데이터베이스에 액세스 프런트 엔드를 구축하거나 언급 한 스 캐 폴딩 프레임 워크를 사용하여 하루 만 부릅니다 . 도메인 중심 시스템 대 예산의 70 %를 깎을 수 있어야합니다.

긴 답변 : 데이터 기반 디자인의 경우 비즈니스 모델 구현은 어떻게 생겼습니까? 일반적으로 응용 프로그램의 새로운 기능을 구축 한 지 2 년이 지난 후에는 어디서나 중복 된 테이블, 뷰, 저장 프로 시저, 다양한 응용 프로그램 서비스, 코드 숨김 파일, 발표자/ViewModel 등 모든 곳에서 볼 수 있습니다. . 요청한 새로운 기능에 대해 도메인 전문가와 대화 할 때 비즈니스 언어에서 구현 언어로 변환하려고 끊임없이 노력하고 있으며 번역하지 않습니다.

일반적으로 일어나게되는 일은 시스템 구현 측면에서 비즈니스와의 의사 소통을 강요 받고 구현이 비즈니스와 개발자가 통신 할 때 강제로 사용하는 "유비쿼터스 언어"가된다는 것입니다. 이것은 광범위한 결과를 낳습니다. 비즈니스의 도메인 전문가는 구현 영역의 전문가라고 생각하기 시작하고 해결하려는 비즈니스 요구보다는 구현 측면에서 요구하는 기능을 시작합니다.

또한 대부분의 데이터 기반 구현은 도메인의 "개념적 윤곽"을 따르지 않으며 시스템 구성 요소는 문제를 해결하기 위해 함께 결합하는 방법이 매우 유연하지 않다는 것을 알 수 있습니다 이는 비즈니스 모델의 개념과 일대일로 매핑하지 않기 때문입니다. 코드가 일관성이 없으면 변경 및 새로운 기능을 구현할 때마다 수정해야 할 수 있습니다.

Domain Driven-Design은 구현을 비즈니스 모델과 매우 흡사하게 만들기위한 도구를 제공하므로 누구나 비즈니스 언어를 쉽게 사용할 수 있습니다. 구현을 테스트하지만 도메인 전문가가 실제로 이해할 수있는 "실행 가능한 사양"을 작성할 수 있습니다.

관련 문제