이것은 매우 이상한 아키텍처입니다. 나와 함께 견뎌주세요.여러 데이터베이스를 쿼리하는 저장소 패턴
Google은 기존의 계층 형 애플리케이션 (데이터, 로직/서비스, 클라이언트)을 보유하고 있습니다. 최근 요구 사항은 서비스 계층이 두 가지 데이터 소스에 액세스해야한다는 것입니다. !!!! (다른 방법은 없습니다) 이 두 데이터 소스에는 동일한 DB 스키마가 있습니다. 대부분의 계층 구조와 마찬가지로
, 우리는 읽고 같은 방법을 쓰기 권한 :IEnumerable<Product> GetAllProducts(),
Product GetProductById(ProductKey id),
IEnumerable<Product> FindProductsByName(string name)
을 제품 DTO들은 다음과 같습니다
:
class Product
{
public ProductKey Key { get; set;}
...
}
class ProductKey
{
public long ID { get; }
}
우리는 두 가지 솔루션을 좁혀 대안 1 : 서비스가 다음과 같이 사용할 DB를 알 수 있도록 매개 변수를 읽기 메소드에 추가하십시오. Product GetProdu ctById (ProductKey id, DataSource dataSource) DataSource
은 열거 형입니다.
대체 2 (내 솔루션) : 키 클래스에 DataSource 속성을 추가하십시오. 이 개체는 개체를 검색 할 때 Entity Framework에서 설정합니다. 또한 db에 유지되지 않습니다.
class ProductKey
{
public long ID { get; }
public DataSource Source { get; } //enum
}
이점은 변경 사항이 클라이언트에 미치는 영향이 최소화된다는 것입니다.
그러나, 사람들은 DataSource
은 비즈니스 가치를 추가하지 않습니다
- 때문에이 솔루션처럼 해달라고. (내 반응은
ID
중 하나 비즈니스 가치를 추가하지 않습니다. 그 대용 키. 그 목적은 지속성 추적을위한)도 중복DataSource
를 포함 할 객체 그래프에서 - 아이들을
어느 솔루션이 더 좋은 소리입니까? 다른 대안이 있습니까?
참고 : 이러한 서비스는 모든 곳에서 사용됩니다. (내가 전화 한 것입니다 그 이상 또는)
[||||||||||||||]
[|||||||||s! ]
[||||nerics! ]
[ Generics! ]
가 나는 "동적 저장소를"사용
데이터베이스 스키마는 동일하지만 이동해야 할 데이터 소스에 대한 단서를 제공하는 DTO 자체에 대해서는 어떤 것이 있습니까? 키 또는 데이터 소스는 어느 시점에서 클라이언트의 관점에서 설정됩니까? – Josh
클라이언트는 검색 할 데이터 소스 (예 : GetAllNewProducts ([데이터 소스]))를 선택합니다. 그런 다음 반환 된 제품을 다른보기에서 볼 수 있고 (데이터 소스 A에서 가져온 경우 편집 가능) 수 있습니다. 이 뷰는 제품과 관련된 항목을 가져 오기 위해 추가 쿼리를 수행합니다 (예 : GetRelatedProducts (ProductKey)). – LostInComputer
개체를 쿼리에서 만들 때 DataSource를 자동으로 설정하도록 ObjectContext (또는 DbContext)를 확장했습니다. – LostInComputer