メインメニューはバックグラウンド管理システムの一種で、特定のメニューまたは特定のメニュー内の特定の機能を表示するかどうかを設定によって制御できます。
その設計と実装に関して、私の個人的な要約は次のとおりです。
(1)
データベース テーブルで保存
一般に、メイン メニューはツリー構造であり、従来のリレーショナル データベースに基づく 2 つのソリューションがあります。
(1-1)
テーブル ソリューションを使用すると、テーブルには親子関係を関連付ける ID と親 ID が含まれます。
(1-2)
2 つのテーブル ソリューションでは、1 つのテーブルはメニューの親子関係を記録するために使用され、もう 1 つのテーブルはメニュー情報のみを記録します。
データ転送スキームも 2 つあります:
(1-1-1)
バックエンドはデータをクエリしてバックグラウンド コード ループを通じて構築するか、SQL トランザクションを使用してツリー構造を構築してフロントエンドに渡します
(1-1-2)
バックエンドはデータをクエリしてフロントエンドに渡し、フロントエンドが独自のツリー構造を構築できるようにします
(2)
json で保存
これは、この問題について主に知りたい方法です。以前に使用したことがあるかどうかはわかりません。次に、親と子を直接ビルドします。メインメニューのノード情報をjson形式に変換し、構成テーブルまたはjsonファイルに保存します。これにより、ツリー構造を構築する手間が省けます。ただし、純粋な json 形式であるため、データ構造が複雑でなければ手動でメンテナンスできますが、複雑な状況に遭遇した場合は、それをメンテナンスするためのメンテナンス インターフェイスを作成する必要がある場合があります。現時点では、json には実装されていないため、フロントエンドである SQL に似たクエリ構文 (js であると仮定します) 追加、削除、変更の確認 (特に削除) を記述するのは特に複雑になります。
同時に、
(2) json を使用して保存する についてもご意見があれば、それについてもお話しいただければと思います。
パフォーマンス、拡張性、保守性などを総合的に考慮します。
ソリューションはテクノロジーに基づいて選択する必要があります。あなたが挙げた 2 つのソリューションについては、最初のソリューションはリレーショナル データベースの実装に適しており、2 番目のソリューションは NoSQL データベースの実装に適しています。
要約すると、最初の解決策をお勧めします。メニュー構造をフラット化すると、後でユーザー、ユーザー グループ、権限、その他のモジュールを設計するときに便利になります。 JSON ソリューションを使用してこれらの操作を実行する場合は、より複雑になります。