2009-11-08 2 views
1

저는 작업중인 webapp에서 객체 모델/웹 서비스를 구성하는 좋은 방법을 결정하는 데 어려움을 겪고 있습니다. 우리는 서로 다른 페이지가 표준 객체에 대해 약간 다른 관점을 필요로하는 공통된 문제가 있습니다. 예를 들어 조직에는 일대 다 팀을 보유 할 수있는 팀 및 조직 유형이 있습니다. 한 페이지에 내가 필요로하는 모든webapp 객체 모델을 구성하는 좋은 방법은 무엇입니까?

class Team { 
    long TeamID { get; set; } 
    string Name { get; set ;} 
    TeamType TeamType { get; set; } 
} 

같은 것입니다 그러나 다른 페이지에 나는 그런 물체의

class Team { 
    long TeamID { get; set; } 
    string Name { get; set ;} 
    string OrganizationName { get; set; } 
    string TeamPicture { get; set; } 
} 

종종 투사가 여러 테이블에 걸쳐 같은 데이터의 다른 투사가 필요합니다. 내 생각에 팀과 조직의 모든 데이터를 쿼리하고 전달한 다음 페이지에서 필요한 부분 만 사용하는 것이 좋지 않습니다. 내가 불필요한 데이터의 엄청난 양의 쿼리 및 시스템 주위에 흐르는 결국 것 같습니다.

내 현재 모델은 각 투영에 대해 별도의 유형을 만드는 것입니다. 형식 안전성을 좋아하지만이 문제는 Team, SimpleTeam, TeamAndOrganization 등과 같은 유형이 있습니다. 예를 들어 team/organization을 사용하고 있지만 여러 가지 다른 문제가있는 동일한 문제를 발견했습니다. 내 시스템의 유형.

어떻게 처리합니까? WCF를 사용하여 webapp와 백엔드 시스템간에 데이터를 전달합니다.

답변

2

일반적으로 모델 당 뷰가 좋은 방법이라고 생각하지만, 서비스 컨텍스트에서이 점에 대해 조금 걱정할 것입니다. 이상적으로, 당신은 당신이보기에 하나의 방법의 폭발을 얻지 않도록 당신의 서비스를 좀 더 일반적으로 생각하고 싶습니다. 일반적으로 내 서비스를 좀 더 일반적으로 만들 수 있다면 필요한 것보다 조금 더 많은 데이터를 제공 할 의향이 있습니다. 필자의 경우 다른 종류의 클라이언트 (모바일 웹 브라우저와 표준 웹 앱)가 있고 일반적으로 동일한 데이터를 얻지 만 모바일 앱은 축소 된 하위 집합을 사용합니다. 이 경우 별도의 모델을 제공하지 않지만 모바일 앱은 일부 데이터를 사용하지 않습니다.

+0

확실히 서비스 방법의 폭발로 이어지게됩니다. 이것은 끔찍한 일입니다. 주변에 떠 다니는 여분의 데이터에 대한 염려로 perf/scalability에 지나치게 우려하고 있습니다. 제품이 잘 팔리고 있으며 사용자 기반이 꾸준히 늘었습니다. 과정을 계속 진행하면 내년에 1000 명 이상의 동시 사용자가 표시됩니다. – AgileJon

+0

성능과 유지 관리간에 균형을 유지해야합니다. 일반적으로 성능이 문제가 될 때까지 유지 보수 가능성을 가지게되고 성능을 개선하기 위해 필요에 따라 리팩터링을 수행하게됩니다. – tvanfosson

+0

와우, 일반 디자인 (조숙 한 최적화가 모든 악의 근원 인)을 몇 번이나 읽었지만 내 디자인에 공감하지 않는 것 같습니다. 고맙습니다! – AgileJon

0

개체 모델을 페이지 뷰에 연결하지 않겠습니다. 일단 그렇게하면 페이지를 변경하는 것이 어렵거나 불가능합니다. 그것은 피하는 레이어 사이의 미묘한 결합입니다.

아마도 클라이언트에서 끝나는 데이터를 필터링 할 수 있습니다. 데이터베이스의 게으른 평가도 도움이 될 수 있습니다.

+0

웹 서비스를 사용하여 데이터베이스에서 webapp를 분리했기 때문에 DB에서 느린 평가가 옵션처럼 보이지 않습니다. 내 '계획안'을 더 많이 재사용하기를 바랬지 만 많이 보지 못했습니다 (예 : 커플 링에 대해 죽었습니다). 그러나 이렇게하면 페이지를 변경하는 것이 어려워지는 것보다 쉽습니다. 다른 페이지에 대한 부작용에 대해서는 걱정할 필요가 없습니다. 왜냐하면 모두 자신의 데이터 프로젝션을 사용하기 때문입니다. – AgileJon

+0

웹 인터페이스가 완전히 사라 졌거나 플래시 또는 Flex UI로 대체되었거나 병렬 인터페이스를 추가하기로 결정한 경우 어떻게됩니까? 이러한 변화를 어떻게 처리 할 것입니까? – duffymo

+0

큰 고통이 될 것입니다! 나는 당신이 "변경"하기가 어렵거나 불가능한 것을 의미하는 것을 오해했습니다. 나는 기존의 페이지를 수정하는 것을 생각하고 있었다. – AgileJon

관련 문제