だから、私はこのような状況に遭遇しました
私は戻り繧制御方法有するlist
オブジェクトをMatch
@RequestMapping(value = "/fetchFootballMatchesToday", method = RequestMethod.GET)
public @ResponseBody List<Match> fetchMatchesScheduledToday() throws ParseException {
return matchesToday;
}
オブジェクトは、Match
15のプロパティ&Iは、UI上の唯一の3つのプロパティが必要と言っています。私は、ユーザーがオブジェクトの他のプロパティを表示したくありません。
それを行うには2つの方法があります。
明示的にすべてのために、nullにプロパティを設定&ループのために実行して
Match
UIに送信されるように意図されていないオブジェクト、。そのようですList<Match> matchesToday = matchInvService.fetchMatchByDate(today); for (Match stats : matchesToday) { if (stats != null) { /* user should not know these details, so they are being set to null */ stats.setMatchSuccessIndex(null); stats.setTeamRanking(null); stats.setStadiumInfrastructureLevel(null); ..... & so on } }
プロパティの数が将来的にアップ追加すると、このアプローチの問題点はあります。このコードは、あまりにも更新する必要があります。また、オブジェクトのプロパティの数が多い場合。私は何度も、ここにはnullを設定することを維持する必要があります。
第2のアプローチは、ループ内で新しいMatchオブジェクトを作成&ちょうどそれに3つの必要な値を設定しています。
List<Match> matchesToday = matchInvService.fetchMatchByDate(today); List<Match> responseList = new ArrayList<Match>(); for (Match stats : matchesToday) { if (stats != null) { Match tmpMatch = new Match(); match.setProperty1(stats.getProperty1()); } responseList.add(tmpMatch); } return responseList;
このアプローチは、追加のマッチがループを実行するたびにオブジェクトを作成します。その特定のメソッドがあまりにも頻繁に呼び出された場合にも、オブジェクトの作成がアップスパイク。オブジェクトがガベージコレクトになりますけれども、これは最適な方法であれば、私は確かではありません。
あなたの提案の連中が必要です。これは、メモリを節約対より多くのコードを書くことの間にはトレードオフですか?これに対処する最良の方法は何でしょうか?
オブジェクトマッチは15個の特性を言っている&Iは、UI上の唯一の3つのプロパティが必要です。私は、ユーザーがオブジェクトの他のプロパティを表示したくありません。
すべてのフィールドを設定すると、null
確かに面倒で、エラーが発生しやすくなります。
だから私は、最初の道を避けるだろう。
第2のアプローチは、より良い方向に行くようです。
クライアントはそれらの特定のビューを参照する必要があるので、しかし、あなたは他のオブジェクトにオブジェクトをマッピングすることを恐れてはなりません。
「合理的な」リストのサイズのための簡単なマッピング操作安いです。そして、私はサイズが合理的である必要がありますので、あなたは、UIに数百万行を表示しないこととします。
そうしないと、ページングの概念を考慮して全体のUIデザインを再考すべきです。
私は番目のオプションを使用します。クライアントが知っているとマッピングする必要が3つのプロパティ宣言クラス作成しMatch
、このクラスにします。それは物事がより明確になります。
List<Match> matchesToday = matchInvService.fetchMatchByDate(today);
List<MatchDTO> responseList = new ArrayList<Match>();
for (Match stats : matchesToday) {
if (stats != null) {
MatchDTO match = new MatchDTO(stats);
responseList.add(match);
}
}
return responseList;
どこMatchDTO(Match)
コンストラクタは、コピーからということでMatch
、インスタンス3つの必要なフィールド:
public MatchDTO(Match match){
this.foo = match.getFoo();
this.bar = match.getBar();
this.fooBar = match.getFooBar();
}
またはJava 8で:
List<MatchDTO> responseList =
matchInvService.fetchMatchByDate(today)
.stream()
.filter(Objects::nonNull)
.map(MatchDTO::new)
.collect(Collectors.toList);