问题是我在服务器端使用 Hibernate,并且我基本上将“原始”数据库数据发送到客户端 - 我猜这很好,但这也意味着我的客户端List<UpcomingEventDTO>
在调用相应的服务时得到一个列出from
一个指定的日期to
另一个。
如果我现在想将这些事件拆分为一个映射,其中键映射到一天的事件列表,例如 aMap<Integer, List<UpcomingEventDTO>>
那么我将不得不在客户端执行此操作。如果我不必在我的 Presenter 中这样做,这不会打扰我。
一方面,我的演示者正在加载:
private void loadUpcomingEvents(final Integer calendarWeekOffset) {
new XsrfRequest<StoreServletAsync, List<UpcomingEventDTO>>(this.storeServlet) {
@Override
protected void onCall(AsyncCallback<List<UpcomingEventDTO>> asyncCallback) {
storeServlet.getUpcomingEventsForCalendarWeek(storeId, calendarWeekOffset, asyncCallback);
}
@Override
protected void onFailure(Throwable caught) {
}
@Override
protected void onSuccess(List<UpcomingEventDTO> result) {
upcomingEvents = result;
presentUpcomingEvents();
}
}.request();
}
以及在我展示之前数据的转换:
private void presentUpcomingEvents() {
Map<Integer, List<UpcomingEventDTO>> dayToUpcomingEvent = new HashMap<>();
for (UpcomingEventDTO upcomingEvent : this.upcomingEvents) {
@SuppressWarnings("deprecation")
Integer day = upcomingEvent.getDate().getDay();
List<UpcomingEventDTO> upcomingEvents = dayToUpcomingEvent.get(day);
if(upcomingEvents == null) {
upcomingEvents = new ArrayList<>();
}
upcomingEvents.add(upcomingEvent);
dayToUpcomingEvent.put(day, upcomingEvents);
}
List<Integer> days = new ArrayList<Integer>(dayToUpcomingEvent.keySet());
Collections.sort(days);
this.calendarWeekView.removeUpcomingEvent();
for(Integer day : days) {
CalendarDayPresenterImpl eventCalendarDayPresenter = null;
eventCalendarDayPresenter = this.dayToEventCalendarDayPresenter.get(day);
if(eventCalendarDayPresenter == null) {
List<UpcomingEventDTO> upcomingEvents = dayToUpcomingEvent.get(day);
eventCalendarDayPresenter = new CalendarDayPresenterImpl(upcomingEvents);
this.dayToEventCalendarDayPresenter.put(day, eventCalendarDayPresenter);
}
this.calendarWeekView.appendEventCalendarDay(eventCalendarDayPresenter.getView());
}
}
所以我的问题基本上是我对在我的演示者中有这样的代码并不满意,但另一方面,我不知道如何以及在哪里为我的演示者提供这种“升级”表单中的数据。
有人可能会争辩说,我也可以只从服务器返回数据,以一种我在服务器上需要它的方式,但那样我会失去一般性,我不想为所有视图和演示者编写他们“自己的”API到数据库。
另一种可能性是,例如在服务/servlet 层之间引入另一个层,并在我的演示者模型之前具有类似 DAO 或数据库层的东西。但这也会对我提出很多问题。例如,这样一个层的名称是什么^^,该层是否会为演示者提供“自定义”数据,或者数据是否仍然是通用的?
我在弄清楚在这里做什么时遇到了很大的问题,所以我希望我能从别人的经验中受益。
非常感谢这里的任何帮助!