ウェブサイトの好みを維持する方法に関するさまざまなオプション?
-
02-10-2019 - |
質問
私はCMSを改修する過程にあり、どの解決策を採用するかわからない状況に遭遇しました。基本的に、当社のクライアントのそれぞれは、ウェブサイトのコンテンツを独自のデータベースに収容しています。これには、コンテンツ、調査、訪問者が使用する検索ワード、メニューStrucutreなどが含まれます。
クライアントのWebサイトの多くのコンテンツは動的であり、CMSを介してそれらを変更できます。このデータはすべて、私が設計したリレーショナルデータベースに保存されていますが、これらの設定をテーブルに保持することがやり過ぎる状況で実行されています。
たとえば、CMSを使用すると、受信者のリストにメールを送信できます。彼らは当社のサーバーを使用することを選択するか、独自のSMTPサーバーに入れることができます。ただし、この場合、「MailService」の列を備えたテーブルを作成し、テーブルに1列のみを保持するため、特定の値を保持するのは少し過剰になります。
このサイトやGoogleで少し検索することで私が思いついたいくつかのアイデアは次のとおりですが、彼らの長所と短所が何であるかはあまりわかりません。
- 基本的に、上記のようにすべての設定をテーブルに保持します。
- これらすべての「シングル」設定をXMLファイルに保持します。XMLファイルは、設定を変更したときに変更します。
- 次のColumsnを使用して設定と呼ばれるテーブルを持っています:id、preferencename、value。新しい好みがあるたびに、追加する、変更する、または削除するだけです(このオプションが好きではありません。私は実装を見ています)
私はXMLのアイデアに傾いていますが、ここStackoverflowで良いコミュニティからいくつかのフィードバックを得たいと思います:)たぶんXMLを使用することは、私が完全に見落としているか、あなたのダムがある理由のために恐ろしいアイデアでしょう-Did-you-jou-just-do-thisソリューション。ご意見をお寄せいただきありがとうございます!
解決
XMLルートは、新しい属性を簡単に追加し、属性をグループ化できるという意味でうまく機能します。マイナス面は、SQLを使用して設定データを移行または更新することが不可能であることです。プログラムで行う必要があります。また、必要性が発生した場合、個々の属性の設定を照会することはできません。
言うまで、SQLを介してクエリまたは更新する必要のない少数の設定を維持している場合、XMLはあなたのためにうまく機能します。それ以外の場合、データベース内の名前、値ペアテーブルは、より良い方法です。
他のヒント
すでにそれを持っている場合は、1つのデータベーステーブルを使用し、設定の名前を賢明なカテゴリに分割します。
mail_service:recipients
mail_service:sender
mail_service:smtp:hostname
mail_service:smtp:username
mail_service:smtp:password
それ以外は、私はとても好みます Yaml 読みやすさのためにXMLに。それはXMLのようなものですが、すべての混乱はありません。
mail_service:
recipients:
- recipient1@domain.com
- recipient2@domain.com
- recipient3@domain.com
- recipient4@domain.com
visuals:
header:
text_color: #BBCCDD
background_color: #FFFFFF
Symfony Yamlクラス そのファイルをPHPアレイに解析するための素晴らしいスタンドアロンライブラリです。
単純なPHPファイルを使用することもできます。
$settings = array(
"mail_service:recipients" => " .... ",
"mail_service:sender" => " .... ",
"mail_service:smtp:hostname" => " .... ",
"mail_service:smtp:username" => " .... ",
"mail_service:smtp:password" => " .... ");
XMLファイルを使用します(XMLである必要はありませんが、Javaであれば、理由がわからない場合にプロパティファイルを使用します) '異なるインストールを区別するための外部キーでない限り、あなたは多くのことを得る。
個人的には、SQLの汎用性が好きで、物事を自己完結型にしています。データベースを使用すると、まだ存在しない複雑さが追加されません(たとえば、パフォーマンスが問題である場合は独自のXMLキャッシュを成長させる必要がある場合、同じレベルのキャッシュを無料で取得します)。 XMLは、SQLを介して扱いにくい本当に複雑な構造がある場合にのみXMLを選択します。
「多くの値をハードコードする必要がある」と思う理由はわかりません。特に、ファイルソリューションよりもデータベースソリューションでハードコードがある理由はわかりません。