サーバー側の応答の構成が不十分なため、コードを効率的に記述する方法を見つけるのに苦労しています。
私が伝えようとしている例はかなり複雑なので、実際の例を使って助けようとします。
たとえば、私がスポーツ リワード プログラムを担当していて、「トップ アスリート ページ」を作成しようとしているとします。このページには、3 つのスポーツのカテゴリから上位の男性と女性のアスリートが表示されます。野球、バスケットボール、そしてサッカー。これに対するひねりは、男性の勝者が 1 人で女性の勝者がいない、またはその逆、またはまったく勝者がいない可能性があることです。その上、女性は野球選手またはバスケットボール選手にしかなれませんが、男性は3つのいずれか、またはバスケットボール選手とフットボール選手の両方になることができます. 野球と他のものとの組み合わせはありません。最後に、男性と女性の両方のプレーヤーが存在する場合は、女性を最初に表示する必要があります。3 つのカテゴリはすべて異なる属性を持ちます。たとえば、野球の「ホームラン数 = 32」と比較して、サッカーの属性は「tds = 43」になります。
したがって、サーバーの応答で混乱が生じます。
<player>
<baseballList>
<baseball
name="Adam"
sex="male"
HomeRuns="32"
reward="True"/>
</baseballList>
<basketballList>
<basketball
name="John"
sex="male"
Points="322"
reward="False"/>
<basketball
name="Sandra"
sex="female"
Points="332"
reward="True"/>
</basketballList>
<footballList>
<football
name= doug
Touchdowns= 33
sex=male
reward="false"/>
</footballList>
</player>
(プレーヤー名がサッカーとバスケットボールの両方に一致し、男性の場合は、2 を組み合わせる場合です) ご覧のとおり、応答は興味のないプレーヤーを送り返しています (理由は聞かないでください)。これを除外する必要があります。また、プレーヤーが複数のスポーツを持っている場合、データを結合しません。したがって、私のアプローチでは、xml を指定された「Players」ハンドラーに送信する xml ハンドラー ファクトリがあります。次のようになります。
public class PlayerHandler implements XmlHandler {
private static PlayerHandler handler = new PlayerHandler();
private PlayerHandler() {
}
public static PlayerHandler getInstance() {
return handler;
}
public void load(String localName, String qName, Attributes attributes) {
if (localName != null && attributes != null) {
if (localName.equalsIgnoreCase("football")||localName.equalsIgnoreCase("baseball")||localName.equalsIgnoreCase("basketball")) {
Player player = new Player();
if (localName.equalsIgnoreCase("football"))
player.category = "football"
player.TouchDowns=attributes.getValue("TouchDowns");
else if (localName.equalsIgnoreCase("baseball"))
player.HomeRuns=arrtibutes.getValue("HomeRun");
player.category = "baseball"
else{
player.category = "basketball";
player.Points=attributes.getValue("Points");}
player.sex=attributes.getValue("sex");
player.name=attributes.getValue("name");
}
playerSorter.addPlayer(player);}}
オブジェクト用に 1 つのクラス ファイルを作成しました。
public class Player implements Serializable{
public String category;
public String rewards;
public String TouchDowns;
public String Points;
public String HomeRuns;
public String sex;
public String Name;
}
指定された基準が満たされた場合にのみリストを作成する addPlayer() メソッドを使用して、「playerSorter」というクラスですべての並べ替えを行っています。次に、checkForAthleteWithInTwoSports() メソッドを呼び出す getPlayers() メソッドがあります (バスケットボールとサッカーの両方に出場している選手がいるかどうかを調べます) よりも、ソートされたリストを返し、女性が最初に表示されます (該当する場合)。メイン ページから getPlayers() メソッドが呼び出され、アダプタ クラスに設定されます。より良いxml応答は、このようなタスクをはるかに簡単にしますが、そうではなく、これを行うためのより効率的な方法を見つけたいと思っています. 誰かがこれに取り組むための良いデザインパターンを見つけるのを手伝ってくれたり、アドバイスをくれたりしたら、本当に感謝しています.