2011-10-27 3 views
3

나는 매우 큰 규모의 데이터 기반 응용 프로그램을 개발하는 회사에서 일합니다. 이 응용 프로그램은 약 10 년 전에 처음 만들어 졌으므로 업그레이드가 절실합니다. 데이터 영역 업그레이드를 조사하고 구현하는 업무를 맡았습니다..NET 응용 프로그램 데이터 계층 업그레이드

현재는 DataRow 오브젝트를 기반으로하는 비즈니스 오브젝트가있는 시스템을 사용합니다. 즉, 각 오브젝트는 데이터베이스의 한 행과 더 관련이 있습니다. 응용 프로그램은 현재 객체 지향적이지는 않지만 많은 문제를 야기하며 OO 방향으로 이동하려고합니다.

.NET 'Entity Framework'를 사용하고 .edmx 파일을 만들려고합니다. 아이디어는 단순히 모든 SQL 데이터베이스 테이블을 .edmx 디자이너로 드래그하여 관련 데이터 객체를 생성하는 것입니다.

이제 (OO 개발자로서) 내 생각에 새 비즈니스 객체를 수동으로 만들고 새 데이터 레이어의 쿼리에서 반환 된 .edmx 생성 데이터 객체에서 채울 계획이었습니다. 이는 인터페이스를 사용하여 다양한 레이어를 간단히 분리 할 수 ​​있습니다.

문제는 보스가 백개 정도 정도의 비즈니스 객체 클래스를 다시 작성할 시간이 없다고 말하면서 .edmx 생성 된 데이터 객체를 전체 애플리케이션에서 사용할 것을 제안합니다.

내 마음 속의 모든 생각은 '아니요 ... 데이터 영역과 전체 시스템 간의 결합을 만들지 마라'라고 말하지만 사장은 온라인으로 기사를 보았습니다.

  1. 는이 가능한 솔루션 (심지어 단기) (2 1의 답에 대한 타당한 이유를 제공하십시오) : 너희들을 위해

    그래서 내 질문이 있습니까?

  2. 생성 된 데이터 개체에서 별도의 비즈니스 개체를 만드는 데 더 나은/대체 솔루션이 있습니까?

  3. 수동으로 복사하여 붙여 넣기보다는 생성 된 데이터 개체에서 별도의 비즈니스 개체를 만드는 것이 더 쉽습니다/더 쉬운 방법이 있습니까?

본인은 이러한 질문이 다소 주관적이지만 최대한 구체적인 정보를 제공했음을 이해하며 주제에 대한 조언을 할 수 있습니다.

+0

"하지만 상사는 온라인으로이 사실을 알리는 기사를 보았다고 말합니다. 빨간색과 같은 소리, 새로운 일자리를 찾는다. :) – Ivo

+0

@Ivo 나는 당신의 뜻을 안다. 나는 내 머리 속에서 울림 소리를 내고있다. 그러나 개발자들이 원하는 것 사이에는 언제나 전투가있다. 사업 (누가 개발비를 지불 하는가)을 원한다. – Sheridan

+0

나도 그래! ....... –

답변

0

이것은 모든 레거시 시스템 사용자가 업그레이드를 시도 할 때 발생하는 일반적인 문제 중 하나입니다.

"수백 가지"의 비즈니스 개체를 만들고 EF 데이터 개체의 데이터를 자신의 것으로 복사한다는 점은 전혀 없습니다. EF 및 비즈니스 객체와 여전히 연결되어 있습니다!

IoC 커플 링으로 전달하려면 비즈니스 계층의 데이터 액세스 계층과의 분리를 고려해야합니다. 그리고 확실히 적은 비용/시간으로 ORM을 전환 할 수 있습니다. 이것은 separation of concern의 아름다움입니다.

소프트웨어 업계에서 지금 비용을 줄이려면 장기적으로 더 많은 금액을 지불해야합니다 (다시 변경하거나 ORM해야 할 경우).

품질 측면에서 보스와 협상을 시도해보십시오. 아마도 약간 비싸지 만 장기적으로는 확실히 획득하게 될 것입니다.

그리고 귀하의 경우에는 EF Code First을 고려해보십시오. 이렇게하면 데이터 액세스 레이어 디자인에서 "데이터베이스 우선"보다 나은 그립감을 얻을 수 있습니다.

수백 시간의 작업 시간을 절약 할 수있는 원하는 방식으로 데이터 액세스 레이어를 생성하도록 발전기를 코딩 할 수 있으며 더 나아가 모듈을 더 잘 구현할 수 있습니다. CodeSmith Generator를 사용하라고 제안합니다. 약간의 학습 곡선이 있지만 가치가 있습니다.

데이터 액세스를 분리하는 것이 기존 시스템을 업그레이드하는 솔루션이 아니라는 점에 유의하십시오. 핵심 기능을 업그레이드하고 유지 관리하는 것이 세계에서 가장 어려운 일이되는 경우가 많습니다. 비즈니스 사람들이 잃어버린 현실적인 업그레이드를 결정하지 않는 한 할 일이별로 없습니다.

핵심 구성 요소를 확인하고 DAL을 업그레이드해야합니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 코드 생성과 다양한 '엔티티 프레임 워크 (Entity Framework)'개발 방법론은 확실히 살펴볼만한 것들이다. 나는 이전에 Unity의 'Inversion of Control'시스템을 사용했지만 감명을받지 못했습니다 ... 가장 단순한 UI 프로젝트조차도 12 초 이상의 시작 시간을 가진 것처럼 보였습니다. 확실히 개발자들은'IoC' 전에 레이어 분리를 할 수 있었습니까? 나는 항상 데이터 계층을 인터페이스하도록 가르쳐졌고 데이터 공급자가 데이터 유형을 참조해야하지만 데이터 공급자에 대한 참조는 하나만 필요합니다 ... 충분히 분리되지 않았습니까? – Sheridan

+0

예! 그것은'DI' 수작업이다.'IoC' 컨테이너는 해쉬처럼 'Dictionary '과 찾기 키도 빠릅니다. 'DI '로 인해 12 시간 이상이 걸릴 확률이 높습니까? 하루에 200K + 히트를받는 사이트에서'IoC'를 사용하고 있었기 때문입니다. 퍼포먼스에 치명타가 있다는 것에 동의하지만 뭔가를 얻기 위해 뭔가를 희생해야합니다 :) –

0

현재 응용 프로그램을 개발하기 시작했을 때 거대한 edmx를 만들지 않기 위해 코드 우선을 사용하기로 결정했습니다. 나는 그것들이 그 디자이너 (그것을 나눠서 등등)를 개선하고 있다고 읽었지 만 그랬듯이, 우리가 만들어야하는 100 개 이상의 객체 때문에 edmx를 사용하고 싶지 않았습니다.

테이블을 읽고 POCO 개체를 코드 우선 작성 (이 작업을 수행 할 도구가 있다고 생각합니다) 한 다음이 모든 개체에 대해 DbSet을 포함하는 컨텍스트를 나타내는 클래스를 만듭니다.

프런트 엔드에서 MVC 응용 프로그램으로 이러한 개체를 사용하려고했을 때 발견 한 것은 직렬 참조 문제가 원형 참조 문제가있는 눈금 (json serialization 사용 빈도가 높음)에 넣으려고한다는 것입니다. 그래서 ViewModels을 생성하기로 결정했고 속도가 필요하지 않은 경우 AutoMapper와 같은 도구를 사용하여 표 < -> ViewModel을 매핑합니다. 속도를 필요로하는 경우 (예를 들어 화면 나열), 실제 linq 쿼리를 작성하여 결과를 뷰 모델 객체로 변환합니다.필자가 발견 한 유일한 문제는 뷰 모델이 매우 평평해야한다는 것입니다.

정말 답이 아니지만 약간의 경험이 있어야합니다.

+0

경험에 대한 흥미로운 의견을 보내 주셔서 감사합니다. – Sheridan

0

문제는 상사가 백 개 정도 비즈니스 객체 클래스를 다시 할 수있는 충분한 시간이 아니라고 말한다이며, 그는 .edmx 전체 응용 프로그램 전반에 걸쳐 데이터 객체를 생성하여 을 제안합니다.

  1. 이것은 단기적인 경우에도 가능한 해결책입니까? &
  2. 생성 된 데이터 개체에서 별도의 비즈니스 개체를 만드는 데 더 나은/대체 솔루션이 있습니까? &
  3. 수동으로 복사하여 붙여 넣기보다는 생성 된 데이터 개체에서 별도의 비즈니스 개체를 만드는 것이 더 쉽습니다/더 쉬운 방법이 있습니까?

ANS : 당신은 리버스 엔지니어링 할 수 Sybase PowerDesigner을 시도하고 당신을 위해 C# 코드를 생성 할 수 있습니다. 또는 CodeSmith을 사용해 코드를 생성 할 수 있습니다.이 도구를 사용하면 시간을 절약 할 수 있습니다.

Developer Express XPODataObjects.Net 등의 프레임 워크가 있거나 시도 할 수있는 LLBLGen Pro과 같은 다른 프레임 워크가 있습니다. 이는 우려를 분리 할 수 ​​있습니다.

+0

감사합니다. – Sheridan

관련 문제