关于JFinal Model初始化建议

Fly的狐狸 发布于 2012/07/23 22:02
阅读 1K+
收藏 0
现在Jfinal是通过ActiveRecord插件然后做Model和表的映射。
如:arp.addMapping("blog", Blog.class); // 映射blog 表到 Blog模型
这样还需要创建一个class:Blog extends Model<Blog> 

如果初始化的时候:
做一个arp.addMapping("blog", "Blog"); //blog做为ModelKey  Blog为表名
然后初始化的时候,后台创建一个Map来存储ModelKey和对应的Model(初始化时完成主键,表字段和类型的设置)
,这样我们就可以通过Model blog = Dao.get("blog");方式获取,即通过ModelKey获取对应的Model(类似以前的Blog.class)。
个人认为这样可以省去Model层的创建,更符合JFinal的设计思想。

下面是Dao的简单代码(Init时完成daoMap的初始化):
 public class Dao {
                //来存储ModelKey和Model
        private static final Map<String, Model> daoMap = new HashMap<String, Model>();

        public void add(String dao, Model model) {
          daoMap.put(dao, model);
        }
       public static Model get(String dao) {
         return daoMap.get(dao);
       }
 }



可能个人建议并不成熟,有问题还请多多指出。
加载中
0
Fly的狐狸
Fly的狐狸

引用来自“JFinal”的答案

    很感谢你提的建议,目前来说 JFinal ActiveRecord 建议用 Model 来承载业务,这样更符合极速开发的要求,你的建议可能与 JFinal 中的 Db + Record 有点类似 :)

我的意思Blog实际就是一个Model 只是里面的TableInfo不一样~所以没必要为每个Model单独创建一个Class。其实完全可以存在一个Map里面去取。

	public static Model getModel(String modelKey) {
		TableInfo tableInfo = tableInfoMap.get(modelKey);
		if (tableInfo == null) {
			return null;
		}
		Model newModel = new Model();
		newModel.setTableInfo(tableInfo);
		return newModel;
	}

这样完全可以通过Model blog = getModel("blog")取到对应的Model。

 

JFinal
JFinal
回复 @zcool321 : 谢谢支持,多来OSC提建议 :)
Fly的狐狸
Fly的狐狸
回复 @JFinal : 呵呵~只是研究源码的一点想法~结贴~~
JFinal
JFinal
回复 @zcool321 : 这样做的确是省代码,也符合JFinal追求的目标,只不过JFinal提倡充血领域模型,所以需要一个Model来承载业务。JFinal CMS 一线以后会演示这种用法,到时还请多来提建议 :)
Fly的狐狸
Fly的狐狸
回复 @JFinal : 嗯,只是提个建议。因为个人认为Model去掉又少干一件事,会更简单,呵呵。
JFinal
JFinal
回复 @zcool321 : AR 这种设计需要用 Model 来承载业务,还是要有的 :)
下一页
2
a
alvinte

Model是充血领域模型,而不仅仅是一个映射。

而且Jfianl本身就是按照你如上的方式把Model到数据库的映射缓存到Map中了,所以本质是一样的,只是对Model的定义不同而已。

2
JFinal
JFinal
    很感谢你提的建议,目前来说 JFinal ActiveRecord 建议用 Model 来承载业务,这样更符合极速开发的要求,你的建议可能与 JFinal 中的 Db + Record 有点类似 :)
1
绝望的八皮
绝望的八皮

你这个dao已经没有意义了。model已经承载了数据访问的功能了。

然后在业务逻辑并不是很复杂的时候,直接controller+model。业务逻辑放到model里面去。也就是上面说的充血模型。

如果在业务比较复杂的时候,可以再controller和model直接加一个sevice层。

 

0
galaxy58
galaxy58
 没看懂是啥意思 
0
Fly的狐狸
Fly的狐狸

引用来自“zcool321”的答案

引用来自“JFinal”的答案

    很感谢你提的建议,目前来说 JFinal ActiveRecord 建议用 Model 来承载业务,这样更符合极速开发的要求,你的建议可能与 JFinal 中的 Db + Record 有点类似 :)

我的意思Blog实际就是一个Model 只是里面的TableInfo不一样~所以没必要为每个Model单独创建一个Class。其实完全可以存在一个Map里面去取。

	public static Model getModel(String modelKey) {
		TableInfo tableInfo = tableInfoMap.get(modelKey);
		if (tableInfo == null) {
			return null;
		}
		Model newModel = new Model();
		newModel.setTableInfo(tableInfo);
		return newModel;
	}

这样完全可以通过Model blog = getModel("blog")取到对应的Model。

 

我的意思主要是想去除Model层的Class,直接通过系统初始化后去取对应Model。
返回顶部
顶部