PersistentObject

モジュールパス: /alier_sys/PersistentObject.js

--- config: class: hideEmptyMembersBox: true --- classDiagram direction LR Singleton <|-- PersistentObject link Singleton "/ApplicationFrameworkReferences/Utility/singleton"

概要


データを永続的に扱うことができるクラスです。
PersistentObjectで扱われるデータは、アプリケーションが終了しても維持されます。 データは自動で保存・読み込みされますが、明示的に保存・読み込みすることも可能です。

PersistentObjectシングルトンクラスの派生クラスです。そのためこのクラスの派生クラスもシングルトンクラスになります。

note

このクラスは、継承して使用することが前提のクラスとなっています。

warning

保存データについて、個人情報やパスワードなどといった機密情報の保存は行わないように注意してください。

特に Web 版は localStrage にデータが保存されるため、機密情報の保存は非推奨です。

PersistentObject が提供している機能

  • 保存:データを永続的に保存する機能です。
  • 読み込み:保存されているデータを読み込む機能です。
  • 自動保存:アプリケーションがバックグラウンドに移行するタイミングで自動的にデータを保存する機能です。自動保存のタイミングは以下の通りです。
    • mobile
      • Alier独自のライフサイクルonEnterBackgroundのタイミングで保存します。
      • Alier独自のライフサイクルonLeaveForegroundのタイミングで保存します。
    • Web
      • beforeunloadのタイミングで保存します。

使用場面の例

例えば、アプリケーションの画面表示(View)だけに関する設定項目を保持する方法を考えてみます。

一般的に View 側は状態管理に不向きなのでデータの保持が難しいですが、Model 側で管理すると View と Model が密接に関係してしまうため、Model の責務を超えてしまい View と Model の責務の分離が困難になってしまいます。

そこで PersistentObject を利用することで、View 側に関するデータを View 側で管理することが可能となり、View と Model の分離が実現できます。


  • データクラスの用意

    • データクラスは、何かしらの情報を示すクラスとして扱います。
    • メンバはデータを示すプロパティのみとし、メソッドなどは不要です。
    warning

    データクラスの内の変数(プロパティ)に対して、プロパティを増減させるような操作を行わないでください。

    //PersistentObjectのインポート
    //mobile版
    const { PersistentObject } = await Alier.import("/alier_sys/PersistentObject.js");
    //Web版
    import {PersistentObject} from "/src/PersistentObject.js";
    
    //永続化したいデータクラスの用意(mobile,web共通)
    class SampleDataClass extends PersistentObject { //<- PersistentObjectを継承する必要があります。
        constructor() {
            super();
            //シングルトンクラスとなるため、this.initialize()を呼び出す必要があります。
            return this.initialize();
        }
        //データを示すプロパティをここに定義します。
        a = 0;
        b = 0;
        c = 0;
    }
  • 永続的なデータクラスを利用する場合

    • 永続的なデータクラス(SampleDataClass)のもつメソッドを明示的に呼び出すことで、インスタンスの保存/読み込みが行えます。
    • 永続的なデータクラス(SampleDataClass)のもつプロパティは、その値の参照や更新が可能でありますが、既存プロパティの削除や新規プロパティの追加は非推奨となっています。
    //(mobile,web共通)
    class UseSampleData {
        sampleData;
        constructor() {
            this.createData();
        }
    
        //永続化したいデータクラスのインスタンス生成を行う関数
        createData() {
            this.sampleData = new SampleDataClass();//title="データクラスの例記載のDataClass
    
            console.log(this.sampleData.a); // 結果:0
            console.log(this.sampleData.b); // 結果:0
            console.log(this.sampleData.c); // 結果:0
        }
    
        //値の更新
        updateData() {
            this.sampleData.a = 1;
            this.sampleData.b = 1;
            this.sampleData.c = 1;
    
            //更新した値を明示的に保存する場合
            this.sampleData.save();
        }
    
        //値の読み込み
        loadData() {
            this.sampleData = this.sampleData.load();
        }
    }

コンストラクタ


PersistentObject のコンストラクタでは、super()の呼び出し後に必ずinitialize()を呼び出すようにしてください。

構文

new (class Derived extends PersistentObject)()

メソッド


save()

  • データオブジェクトをストレージに保存します。

load()

  • 保存されているデータを読み出し、データオブジェクトのデータを復元します。