public String addUser() {
if(user == null) { return FAIL_NO_USER; } Result result = null; if(Role.ADMIN.equals(user.getRole())) { result = doSomethingForAdmin(user) ; } else { result = doSomethingForOthers(user); } Transaction trans = sess.beginTransaction(); Query query = sess.createQuery("update Result set level = :level"); query.setParameter("level", result.getLevel()); query.executeUpdate(); trans.commit(); sess.close(); return SUCCESS; } |
public String addUser() {
if(user == null) { return FAIL_NO_USER; } Result result = service.process(user); dao.update(result); return SUCCESS; } 在service里: public Result process(User user) { Result result = null; if(Role.ADMIN.equals(user.getRole())) { result = doSomethingForAdmin(user) ; } else { result = doSomethingForOthers(user); } return result; } 在dao里: public void update(Result result) { Transaction trans = sess.beginTransaction(); Query query = sess.createQuery("update Result set level = :level"); query.setParameter("level", result.getLevel()); query.executeUpdate(); trans.commit(); sess.close(); } |
代碼更易讀。每一層的每個方法的意義和目的更加明確,讀以起來受的干擾更少。
拆開后的每一層都更容易測試。
具體如何分層,還需要在開發中,多多體會,這沒有絕對的界限,也許一開始放在action里的頁面的控制后來會上升為業務規則,并被其它地方重用,然后被移入service;也許某一塊對數據的存取也變得非常復雜,包含了業務邏輯,然后被移入service;也有可能發現以前寫的service根本沒有想像的那樣的業務邏輯,只是幫助做了一些頁面的流程控制,然后被重構成Action的一個方法,等等。