現在、EntityFrameworkCore 2.0.0を使用しています。エンティティフレームワークオブジェクトに対応する非データベースクラスを追加します。
私が作成しているアプリケーションは、オンラインストア製品のスクレーパーです。すべてのストアはデータベースに保存され、各ストアにはIStoreScraper
を実装するスクレーパーがあります。
これは私の店のモデルである:データベースからフェッチされるとStore
オブジェクトへの正しいIStoreScraper
オブジェクトを追加することが可能である場合、私は思っていた
public class Store
{
public int Id { get; set; }
public string Name { get; set; }
[NotMapped]
public IStoreScraper StoreScraper { get; set; }
}
。データベースからの値か他の何かによって。
これもモデルのコンストラクタに挿入する方法を検討しましたが、これはそれぞれのクラスには既に知られている実装があるため、Dependency Injectionパターンに違反します。
多分、私はこのコードをモデルクラスに入れてはいけないので別の観点から見るべきでしょうか?何か案は?
さて、Storeオブジェクトを与える 'StoreFacade'クラスを作って、これが様々なスクレーパーとの通信を処理するとしたら、各クラスの正しいスクレーパーを得るにはどうすればよいでしょうか? – Jerodev
あなたの要件に完全に依存していますが、答えが広すぎるのです...これは、データベースに格納されている値に依存する可能性があります。この場合、ディクショナリからデータベースから値を渡すか、それ以外の方法でそれを割り当てるかのいずれかで、適切なスクレイパーを検索するだけです...これに対しても、あなたのEFモデルのレイヤーのontopですが、このアプローチはうまくいくはずです... –
Milney
実際にエンティティに対してIStoreScaperを保存する必要がありますか?これは、スクレイピングを実行するメソッド(または、理想的には、スクレイピングを実行するサービスへの依存関係)に引数として渡す必要があります。つまり、任意の速度 - ストアドメインオブジェクトよりも高いレベルです。私は真剣にあなたのデザインを考え直すことを検討するだろう – Milney