3

どの規則が好まれますか、またその理由は何ですか?

これ:

<company>
    <employees>
        <employee />
        <employee />
        <employee />
    </employees>
    <buildings>
        <building />
        <building />
    </building>
</company>

またはこれ:

<company>
    <employee />
    <employee />
    <employee />
    <building />
    <building />
</company>
4

5 に答える 5

2

一般に、プログラミングで XML を扱うときは、プログラムで使用できるオブジェクトに変換したいことがよくあります。ほとんどの XML シリアライザーは、親要素のプロパティを表す要素を取ります。

一番上の例のようにそれらをグループ化すると、シリアライザーはそれを単一のコレクションまたは配列プロパティとして解釈できます。この場合、オブジェクトのコレクションであるプロパティCompanyを持つ があります。EmployeesEmployee

2 番目の方法で行うと、" "、" "、" " などのCompanyプロパティを持つオブジェクトが作成されます。プログラミングをしているとき、それは良いオブジェクト設計ではありません。EmployeeEmployee2Employee3

于 2009-12-16T19:34:06.260 に答える
1

特定の要素を介してコレクションを明示的に表現する意味上の理由はありません。最終的に、どちらのドキュメントも同じ意味を持ちます。つまり、すべての従業員と建物を含む会社を表しています。

ただし、最初の例が提供する追加の利点があります。

  • より読みやすく、エディターでのアウトライン化の恩恵を受けることができます。
  • より厳密なスキーマを作成できます
  • 厳密に型指定されたコレクションへのシリアライズが容易
  • 内部のすべての要素に適用されるコレクション要素の属性を指定できます

反対に、2 番目の例にも独自の利点があります (ただし、少なくともこれらは疑わしいと思います)。

  • おしゃべりが少ない/メモリ使用量が少ない
  • XML 以外のツールを使用して処理する方が簡単
于 2009-12-16T19:40:11.613 に答える
1

グループ内のすべての従業員に関連付けることができる属性またはデータはありますか? 私は通常、最初の例 (グループ化要素) を選択します。

  1. 複数のグループを作成する
  2. グループ全体にデータを添付する

もう少し冗長ですが、今後の柔軟性が大幅に向上します。

于 2009-12-16T19:32:53.517 に答える
0

どのデータを表しているかを考えてアプローチします。

C# では、次のように表示されます。

// Top Example:
public class Company
{
  public Employee[] employees;
  public Building[] buildings;
}

// Vs. Bottom Example:
public Things[] employeesAndBuildings;

論理的には、建物と従業員は同じものではありません。会社には複数の建物と複数の従業員がいるため、2 つのグループを論理的に分離する必要があります。

2 番目の例は短く、フォーマットを読み取る内容に応じて、リーダーは 2 つの項目を同じように簡単に分離できます。ただし、読みやすさのために、物事が異なる順序で進むと、形式がより読みにくくなる可能性があります。

<company>
    <employee />
    <building />
    <employee />
    <building />
    <employee />
</company>

私は最初のフォーマットに行きます。

于 2009-12-16T19:45:46.160 に答える
0

質問に答えるには... グループ化要素は、視覚的にもプログラム的にも読みやすさにどのように影響しますか?

グループ化された方法 (<employees>および を使用<buildings>) は、より視覚的です。

/company/employees/employeeグループ化されていない方法は、XPath クエリに対してはもう少し簡潔です/company/employee

したがって、1 つの 6 つ、もう 1 つの半ダースの可能性があります。

于 2009-12-16T19:34:05.887 に答える