これは非常に奇妙なアーキテクチャです。我慢してください。
既存の階層型アプリケーション (データ、ロジック/サービス、クライアント) があります。最新の要件は、サービス レイヤーが 2 つのデータ ソースにアクセスすることです!!!! (他の方法はありません) これら 2 つのデータ ソースには同じ 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; }
}
考えられる解決策を 2 つに絞り込みました。
代替案 1: パラメーターを読み取りメソッドに追加して、サービスが使用する DB を次のように認識できるようにします。 Product GetProductById(ProductKey id, DataSource dataSource)
DataSource
は列挙型です。
代替案 2 (私の解決策): DataSource プロパティをキー クラスに追加します。これは、オブジェクトの取得時に Entity Framework によって設定されます。また、これはデータベースに永続化されません。
class ProductKey
{
public long ID { get; }
public DataSource Source { get; } //enum
}
利点は、変更によるクライアントへの影響が最小限になることです。
ただし、人々はこのソリューションを好まないため、
- これ
DataSource
はビジネス価値を追加しません。(私の回答は、ID
ビジネス価値も追加しないというものです。これは代理キーです。その目的は永続性を追跡することです) DataSource
オブジェクト グラフの子には、冗長なものも含まれます
どちらのソリューションがより健全ですか? 他の選択肢はありますか?
注: これらのサービスはどこでも使用されています。