以下这段代码为例。。。
里面包含了几部分:
1. 从表单获取数据
2. 查询相应数据(具体的业务 一行代码搞定了)
3. 转化为 页面所需要的相关格式
4. 数据排序 并放到map里
我明白“将业务逻辑提取出来放到service”之类的话, 但是这里面确实无任何业务逻辑, 百分之九十以上都是为页面服务的数据转化。 如果放到业务层或者领域层会明显污染业务代码。
请大家以这个为例说说应该如何去做
(如果把一部分map的操作放进facade 或者service , 纯粹的数据加工这类的代码, 放到 这两个层里面 是否合适? 还是有其他的方式? 老实说写完我就觉得乱糟糟了这种代码)
[code="java"]
public ModelAndView tochoose(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map map = new HashMap();
String buildingNum = request.getParameter("buildingNum");
String scanCode = request.getParameter("scanCode");
Validate.notEmpty(scanCode);
Subscribe sc = subscribeRepository.load(scanCode);
if (sc != null && sc.isLotteryScan()) {
// 加载所有楼号
List<String> allBuildNums = houseChooseService.getAllBuildingNum();
map.put("sc", new SubscribeViewAdapter(sc));
map.put("scanCode", scanCode);
map.put("allBuildingNum", allBuildNums);
} else {
return new ModelAndView("choose/error");
}
//选择了楼号
if (null != buildingNum && !"".equals(buildingNum)) {
//查出小区
List<Area> allArea = areaRepository.findAll();
if(allArea.size() == 0){
throw new Exception("请先配置本小区的名称");
}else{
map.put("area", allArea.get(0).getName());
}
// 通过楼号, 查出01 和02 不同朝向 的房间
List<HouseSource> houseList = houseChooseService.listByBuildingNum(buildingNum);
List<HouseChooseViewAdapter> leftList = new ArrayList<HouseChooseViewAdapter>();
List<HouseChooseViewAdapter> rightList = new ArrayList<HouseChooseViewAdapter>();
for (HouseSource h : houseList) {
if (h.direction().equals(Constants.ROOM_NUMBER_DIRECTORY_LEFT)) {
leftList.add(new HouseChooseViewAdapter(h));
}else if (h.direction().equals(Constants.ROOM_NUMBER_DIRECTORY_RIGHT)) {
rightList.add(new HouseChooseViewAdapter(h));
}else{
throw new Exception("该楼盘房间号格式错误,最后两位为 "+Constants.ROOM_NUMBER_DIRECTORY_LEFT
+" 或 "+Constants.ROOM_NUMBER_DIRECTORY_RIGHT+" 房间号:"+h.roomNum() + " 楼号:"+h.buildingNum());
}
}
//房间号从大到小
Collections.sort(leftList);
Collections.sort(rightList);
map.put("west", leftList);
map.put("east", rightList);
}
return new ModelAndView("choose/choose", map);
}
[/code]