2009-10-12 6 views
1

그래서API 및 사용자 지정 RDB 업데이트

현재 두 개의 다른 데이터 소스가 업데이트되는 프로젝트를 진행하고 있습니다.

비즈니스 오브젝트는 구조는 비슷하지만 완전히 동일하지는 않습니다.

현재 내가 계획하고있는 것은 공급자 인터페이스를 사용하기 때문에 두 데이터베이스 모두를 처리 할 처리기 클래스가 있습니다.

두 번째 객체가 외부 API에서 왔으므로 가장 좋은 방법은 내 맞춤 객체를 밀어 넣고 API 공급자에서 수동으로 매핑하므로 다른 개발자가 양식 등을 구현한다는 것입니다. 이것이이 모든 것을 할 수있을 것입니다.

필자는 어느 시점에서 매핑을 항상 수행해야한다고 생각하지만 누군가 구현 된 방법으로 수행하는 것이 더 좋은 방법인지 궁금합니다. 아래에서 현재 생각하고있는 것에 대한 골격입니다. 어떤 아이디어?

IBusinessObject1PushProvider 
{ 
    Create(); 
} 


DSOneBusinessObject1Pusher : IBusinessObject1PushProvider 
{ 
    Create() 
    { 
     // move custom object into our database 
    } 
} 

DSTwoBusinessObject1Pusher : IBusinessObject1PushProvider 
{ 
    Create() 
    { 
     APIObj1 ob1 = new APIObj1(); 
     ob1.Name = obPassedThrough.FirstName + obPassedThrough.LastName; 

     // move ob1 to the webservice having had the datamassaged. 
    } 
} 

답변

1

가장 좋은 해결책은 adapter pattern입니다.

특정 구현과 관련이없는 원하는 API를 다루는 인터페이스를 정의한 다음 인터페이스를 구현하는 각 데이터 소스마다 하나씩 두 개의 어댑터를 정의하여 기본 API로 변환합니다.

이 접근법을 사용하면 위의 어댑터 이외의 다른 것을 변경하지 않고 데이터 소스 중 하나를 대체 할 수 있습니다.

간단한 예가 필요할 경우 의견을 남기십시오.

+0

이것은 내가 답변을 기다리고있는 것과 가장 비슷합니다.나는 이것을 사용하거나 공급자 모델이 효과적으로 동일하게 작동하도록 제안했다고 생각한다. – tim

1

내 생각과 같은 기능을 구현할 때는 다음과 같습니다

  1. 가 일대일 매핑이 정상적인 동작이
  2. 그래서 1

규칙에 대한 예외를 지정 있다고 가정 기본적으로 fieldNames와 types가 일치하는 한 속성을 사용자 정의 객체에서 api 객체로 복사합니다 (속성에 대한 일부 지정을 할 수 있습니다). 당신은 반사 및 동적 표현을 사용하여 빠르고 신뢰할 수 있습니다.

첫 번째 규칙에 예외 (예 : ob1.Name = obPassedThrough.FirstName + obPassedThrough.LastName;)를 지정하려면 원하는 동작을 지정해야합니다. 일반적인 변환 패턴을 사용하여 코드에서이 작업을 수행 할 수도 있고 XML 등으로 지정할 수도 있습니다.

이렇게하면 모든 종류의 개체를 자신의 데이터베이스와 타사에 게시 할 수있는 매우 간단한 코드를 작성할 수 있습니다. 양면에서 똑같은 일반 오브젝트는 즉시 작동하고, 이상한 행동은 개발자가 쉽게 구현할 수 있습니다.

0

데이터 저장소가 동기화되지 않을 가능성이 있습니다.

set local_stat = IN_PROGRESS; 
id = create(the_data,local_stat); 
commit; 
send to remote_service(); 
if (ok) 
then 
    set local_stat = IN_SYNC; 
else 
    set local_stat = OUT_OF_SYNC; 
update(id,local_stat); 
commit; 

그런 다음 대부분의 오류 상태에서 복구 할 수 있습니다 -이 : 당신에 같은 지역의 DB를 어떤 상태 플래그의 일종을 가지고 좋은 생각 일 것입니다.

관련 문제