service

关于service层不理解,如何正确使用,谢谢!

评论区

aloneJFinal

2017-09-14 16:55

谈一下我自己的理解吧,为了更简洁清晰的实现WEB程序的开发,实现WEB程序的智能分工,大伙就整合了一套通用的架构方式,即MVC。

MVC提出三个概念,M-模型,数据的表示及载体,jfinal中就是各种Model类了;V-视图,数据的呈现,提供给用户的UI界面,这个根据实际需要决定如何展示;C-控制器,视图与模型连接的桥梁,纷发业务产生合适的数据(模型),传递数据给视图进行良好的展现,jfianl中就是Controller类了。

但实际开发中,仅仅有这三者还是不够的,要开发一个完整的项目,我们还需要其他的很多模块,同时遵从MVC思想,即明确分工(分层),WEB项目中又会有数据访问层(dao层),jfianl中就是Model中的各种增删改查的方法了,同时为了处理不同的业务,还会有业务层,这就是你说的service了, jfianl的文档和demo中只是列举框架的应用,所以没给出service层,这个也不好给,每个人的业务逻辑都不同,所以jfinal鼓励根据自己的需求构建service层,有了service层后,Controller中则只负责接受request,以及返回response,什么业务都不需要处理,代码会干净很多,管理维护也更方便。

我是这样处理的,构建一个类,用来存储通用的返回格式,controller中只负责接收参数,然后传递参数给service处理业务,service处理完返回一个通用的返回格式给controller,controller将此内容回传给客户端。如此,代码会精简很多,看起来也会更舒服,controller中类似:

/**
* 获取用户信息
* url:http://localhost:8080/mate/user/getUserInfo
*/
public void getUserInfo() {
DefaultResponse response = UserService.service.getUserInfo(getLanguage(), getUid());
renderJson(response);
}

service中类似:
public DefaultResponse getUserInfo(int language, long uid) {
if (uid == 0) {
logger.error(getMsg(uid, "need_login"));
return fail(language, ReturnCode.NEED_LOGIN, "need_login");
}

User user = User.dao.findById(uid);
user.remove("password");//去除不需要回传的字段

return success(user);
}
等等。

冰雨

2017-09-18 10:30

加入俱乐部,不仅可以拥有俱乐部的网站源码,学到很多姿势,更重要的,波总的直播讲义和俱乐部小伙伴们的热心,绝对的最高性价比!

晴明

2017-09-20 14:32

@aloneJFinal 非常感谢您的指点哦!

热门反馈

扫码入社