문제

레거시 웹 양식 응용 프로그램을 완전히 새로운 MVC 응용 프로그램으로 확장 / 변환하고 있습니다. 확장은 기술뿐만 아니라 비즈니스 유스 케이스의 측면에서도 있습니다. 레거시 응용 프로그램은 잘 수행 된 데이터베이스 기반 디자인 (DBDD)입니다. 예를 들어, 운영자, 수퍼바이저, 상점 키퍼 등의 종류의 직원이있는 경우 새 유형을 추가하고 몇 가지 테이블과 voila에있는 행을 추가해야하며, UI는 자동으로 새 유형을 자동으로 추가 / 업데이트해야합니다. 직원의 유형. 그러나 레이어의 분리는 그렇게 좋지 않습니다.

새 프로젝트에는 두 가지 기본 목표가 있습니다

  • 확장 성 (현재 및 미래의 파이프 라인 요구 사항)
  • 성능

    DBDD를 도메인 기반 설계 (DDD)로 데이터베이스 기반 설계 (DBDD)를 대신하여 확장 성 요구 사항을 염두에 두어야합니다. 그러나 데이터베이스 중심 디자인에서 도메인 기반 디자인으로 이동하는 것은 유산 DBDD 응용 프로그램의 성능과 비교하면 성능 요구 사항에 반비례 한 것으로 보입니다. 레거시 응용 프로그램에서 UI의 데이터에 대한 모든 호출은 데이터베이스와 직접 상호 작용할 것이고 데이터 세트의 형태로되거나 데이터 세트의 형태로 되돌아갑니다.

    이제 데이터에 대한 모든 통화가있는 경우 엄격한 DDD를 사용하면 비즈니스 계층과 데이터 액세스 계층을 통해 라우팅됩니다. 이는 각 호출이 비즈니스 오브젝트와 데이터 액세스 객체를 초기화하는 것을 의미합니다. 단일 UI 페이지에는 여러 유형의 데이터가 필요할 수 있으며이 페이지는 여러 사용자가 각 페이지를 요청할 수 있습니다. 또한 MVC 웹 응용 프로그램은 상태가 없으므로 각 요청은 매번 비즈니스 오브젝트 및 데이터 액세스 개체를 초기화해야합니다. 따라서 DBDD가 성능을 위해 DDD가 선호하는 MVC STATEILED 애플리케이션에 대해 보입니다. DDD에서 DDD가 모두 제공하는 확장 성 및 DBDD가 제공하는 확장 가능성을 제공하기 위해 DDD에서 DDD가 제공하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

업데이트가 도메인 모델을 통해 아직 읽는 것이 DataReader로서 오는 명령 쿼리 분리의 일부 형식을 고려 했습니까?전체 Blown DDD가 항상 적절하지는 않습니다.

다른 팁

"이제 데이터에 대한 통화가 비즈니스 계층과 데이터 액세스 계층을 통해 라우팅됩니다."

나는 이것이 사실임을 믿지 않는다. 그리고 그것은 확실히 실용적이지 않다. 나는 이것이 읽어야한다고 믿는다 :

이제 엄격한 DDD를 사용하면 트랜잭션 에 대한 호출은 비즈니스 계층과 데이터 액세스 계층을 통해 라우팅됩니다.

화면에 표시 할 데이터를 가져 오기 위해 데이터 액세스 레이어를 직접 호출 할 수없는 경우는 없습니다. 그 동작에 따라 설계된 도메인 모델을 호출하는 데 필요한 데이터를 수정 해야하는 경우에만 있습니다. 내 의견으로 이것은 핵심 구분입니다. 도메인 모델을 통해 모든 것을 라우팅하는 경우 세 가지 문제가 있습니다.

  1. time - 이점이 없어도 기능을 구현하는 데 더 오래 걸릴 것입니다.
  2. 모델 디자인 - 동작이 아닌 쿼리 요구 사항을 충족시키기 위해 도메인 모델이 모양이 없어집니다.
  3. 성능 - 여분의 레이어 때문에 아니지만 쿼리에서 직접 가능한 할 수있는 것처럼 모델에서 집계 된 데이터를 빨리 가져올 수 없기 때문입니다. I.E.E. 특정 고객에 대한 모든 주문의 총 가치를 고려하십시오. 고객을 위해 모든 주문 엔티티를 가져 오는 것보다 훨씬 빠르게 쿼리를 작성하는 것이 훨씬 빠릅니다.

    chriseyre2000이 언급했듯이 CQRS는 이러한 정확한 문제를 해결하는 것을 목표로합니다.

DDD를 사용하면 시나리오에서 중요한 성능의 영향을 미치지 않아야합니다.당신이 걱정하는 것은 데이터 액세스 문제가 더 비슷하게 보입니다.당신은 그것을 이라고합니다

비즈니스 오브젝트 및 데이터 액세스 객체 초기화

왜 '초기화'가 비싸습니까?어떤 데이터 액세스 메커니즘을 사용하고 있습니까?

관계형 데이터베이스에 저장된 긴 물체가있는 DDD는 일반적으로 ORM으로 구현됩니다. 제대로 사용하면 을 사용하면 orm은 대부분의 응용 프로그램의 성능에 미치는 영향을 거의하지 않습니다.그리고 입증 된 병목 현상이있는 경우 항상 앱의 가장 성능에 민감한 부분을 원시 SQL로 전환 할 수 있습니다.

가치가있는 것은 무엇인지, NHibernate는 응용 프로그램 시작시 한 번만 초기화되어야합니다. 즉, 일반 데이터 판독기와 동일한 ADO.NET 연결 풀을 사용합니다.따라서 모든 것이 적절한 매핑, 전략을 가져오고 'n + 1 선택'과 같은 고전적인 데이터 액세스 실수를 피하고 전략을 가져 오는 것입니다.

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