2017-01-14 7 views
0

JSONまたはXMLファイルを使用して、ASP.NETコアアプリケーションにデータを格納したいとします。
理由は、データが多くなく、データに大きな変更がないということです。利点は、アプリケーションの速度が向上し、アプリケーション用のデータベースが不要であることです(お金を節約します)。ASP.NETコアのデータソースとしてXMLまたはJSONを使用する方法

私は考えていることは、データをXMLまたはJSONにシリアル化することです。アプリケーションが起動すると、このデータをメモリにロードする必要があります。
変更があった場合、ファイルを更新する必要があります。

これを行う簡単な方法はありますか、これは落胆すべき作業方法ですか?

+0

速度を改善しましたか?あなたが本当にスピードを追っていれば、シリアライゼーションとリフレクション技術をバイパスし、フラットファイルを探します。しかし、正直言って、しないでください。残念ながらあなたの質問は広すぎます。 [尋ねる] – MickyD

答えて

1

使用するデータストレージテクノロジが何であっても、アプリケーションが特定の実装に縛られないように、インターフェイスの背後にあるデータアクセスを抽象化することをお勧めします。これにより、将来的に決定した場合、他のストレージテクノロジに簡単に切り替えることができます。

public interface IDataStore 
{ 
    IQueryable<MyModel> Get(); 

    void Add(MyModel model); 

    ... 
} 

このように実装することができます:

public JsonDatastore : IDataStore 
{ 
    private readonly string dataFile; 
    private readonly IList<MyModel> data; 

    public Datastore(string dataFile) 
    { 
     this.dataFile = dataFile; 
     this.data = JsonConvert.DeserializeObject<IList<MyModel>>(File.ReadAllText(dataFile)); 
    } 

    public IQueryable<MyModel> Get() 
    { 
     return this.data.AsQueryable(); 
    } 

    public void Add(MyModel model) 
    { 
     // If you want a lock free implementation you may consider 
     // an algorithm which will only notify some underlying thread 
     // that a change has been made to the underlying structure and 
     // it will take care of saving those changes to the file system 
     // This way it is guaranteed that only one thread is writing 
     // to the file while the changes can be made in memory quite fast 
     // (using a ConcurrentBag<T> instead of a list for example) 

     lock (this) 
     { 
      // Make sure that only one thread is updating the file 
      this.data.Add(model); 
      string json = JsonConvert.SerializeObject(this.data); 
      File.WriteAllText(this.dataFile, json); 
     } 
    } 
} 

さて、最後の重要なビットがあることを確認することですあなたは、メモリ内のデータストア、そしてなぜを使用したいのであれば

依存性注入コンテナ内のDatastore存続時間インスタンスをシングルトンと設定します。

関連する問題