关于JFinal项目分层

波总,能否提供一个结构清晰的Demo,目前有一点困惑,总感觉有点乱:1受传统Spring框架的影响,总感觉用JFinal不知怎么分层写更合理,更优雅清晰,还有事务的控制,在Action层控制还是用其他的方式比如enhance()等更好?

评论区

JFinal

2016-09-08 12:40

jfinal 项目建议分为 MVCS 四层结构:
1:M 层用 jfinal 2.2 生成,model 中不要使用 static Xxx dao 这样的对象,避免新手误用,model 中只放一些与字段状态相关的方法,例如 User 这个 model 你可以针对 status 字段,放一个 public boolean isStatusOk() 这样的方法
2:V 层就是展现层,尽可能只去展现数据,避免复杂逻辑
3:C 是控制层,只负责得到前端参数,转调业务层,render。避免写业务逻辑,绝不可写数据库查询之类的代码
4:最最核心是 S 业务层,基本上来说, 95% 以上的代码要写在这里,只要是对数据库的操作代码也全部写在这里。如果业务层以外需要操作数据库,那么也要先在业务层去创建方法,然后再让业务层以外去转调这个业务层代码,这样可实现尽可能大的代码重用
5:事务控制,我个人习惯于使用 Db.tx(...) 来做,如果要用拦截器,建议使用业务层拦截器,控制层坚持只做我前面 3 中所说的事情
6:只在需要的时候使用接口、抽象类,业务层在绝大部分情况下不需要使用接口,直接是 XxxService.java 就可以了
jfinal 社区官网再完善一段时间会抽取出里面比较通用的功能开放出来,多多关注社区动态

冰雨

2016-09-08 12:52

@JFinal 非常感谢,回复太迅速了,向波总致敬!支持JFinal越做越强大!

JFinal

2016-09-08 12:58

@冰雨 这是个好问题,所以要点赞。收到点赞通知了吧,今天刚上的功能,用户体验感觉如何?

冰雨

2016-09-08 13:03

@JFinal 收到了!很不错!

JFinal

2016-09-08 13:37

@冰雨 补充一下前面的回复:model 中不要创建 dao 对象以后,将 dao 对象创建在 service 层中这样来:private static Xxx dao = new Xxx(); 记得是 private,这样就防止其它业务插手本业务的事情
收到了你的捐助,非常感谢你的支持

JFinal

2016-09-08 13:41

我习惯于这样做业务层:
public class XxxService {
public static final XxxService me = new XxxService();
final Xxx dao = new Xxx();

public Ret justDoIt(...) {
if (...)
return Ret.error("msg", "xxxx");
....
return Ret.ok(key, value);
}
}
这样做以后,外界可以这样调用:XxxService.me.justDoIt(...); dao 对象仅供 XxxService 内部使用,而且由于 me 对象是 static 的,所以内部所有其它的属性和方法都不要弄成 static 的
此外,如果用到业务层 AOP,将 new XxxService() 改成 Duang.duang(XxxService.class) 即可

lyh061619

2016-09-10 15:30

@JFinal 赞波总,良好师益友。

绿色的小苹果

2016-09-12 16:42

@JFinal 数据库的操作不在model中写吗 为什么要写到service层

JFinal

2016-09-12 16:44

@绿色的小苹果 写在 servcie 层更适合大型项目,如果你的项目很小,写在 model中也是可以的

绿色的小苹果

2016-09-13 10:02

@JFinal 大项目在service层写(select * xxx ...) 那model层写什么东西比较好呢

JFinal

2016-09-13 11:00

@绿色的小苹果 model 层写什么代码较好,在我第一点回复中的第一项中有说明

ploolp

2016-10-30 12:54

非常期待,官方能开放出具有良好结构的demo,包括异常、事务处理等等

说忘了

2017-12-06 13:08

@JFinal 请问有分层的demo吗?

jlynet

2018-01-18 11:00

@JFinal 能出一个比较规范的项目分层demo吗?

xufu123

2018-03-27 09:55

有没有标准分层Demo,^-^

wangwei_921216

2019-04-02 13:10

@JFinal请问如何构建一个通用的业务层