1. 程式人生 > >最近看了一些東西,隨便寫寫JFinal的一些東西吧

最近看了一些東西,隨便寫寫JFinal的一些東西吧

領域模型,domain

失血:只有get set方法

貧血:除了get set方法還可能有不涉及資料庫的邏輯,如計算邏輯等

充血:有持久層的邏輯,如User user = new User(); user各種set,最後user.save();

漲血:充血至少事務還在service層,漲血連service層都取消了。

昨天看了mockMvc的程式碼和httpClient的程式碼。發了2篇文章。

今天看了JFinal的程式碼。

我也曾經寫過一個框架。

JFinal是充血模型。

JFinal的dao和model是一個東西:

public class User extends Model<User> {

public static final User dao = new User();

}

看了JFinal的dao的find() 方法實現,發現連反射都沒有用,直接把資料庫的resultSet(結果集)放到了一個Map裡。

我以前寫的SuperDao是反射直接把實體類的屬性set進去了。

不過JFinal的實體類根本沒有field,內部是一個Map,Map的key直接是資料庫欄位。

實際上JFinal 的實體類就是一個Map,變數名是資料庫欄位,這樣造成了記憶負擔。

不過也有解決方案:

public class User extends Model<User> {

public static final User dao = new User();

private static String id = "user_id";

private static String userName = "user_name";

}

int id = user.get(User.id); //----------------------------------> get方法就是從Map中取。這應該算是一個代理模式吧。

String userName = user.get(User.userName);

JFinal的表現層框架是靠filter攔截,JFinal類有一個Handler責任鏈。

Handler是一個abstract class。

public abstract void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled);

比我當初的實現強多了,我也是一個filter,不過filter裡直接ActionMap對映到具體的Action類,直接execute了。

JFinal沒有內建的IOC,不過可以用外掛。

JFinal的事務是通過aop實現的。是Tx.class

需要aop事務增強的方法,只需要一個註解@Before(Tx.class)

沒具體看,想來有方法前aop註解@Before,就一定有方法後aop @After吧。

就寫這些吧。