为了账号安全,请及时绑定邮箱和手机立即绑定

关于service层的疑惑

关于service层的疑惑

思君满月 2015-08-15 20:00:35
service层是服务层,那么service层的接口应该由什么定义呢?按照我的观点,既然是服务层,那么应该由你提供的服务决定。假如我的user模块只提供三种服务,用户登录,用户注册,修改密码,那么我的服务层只提供三个接口:UserService:    ->login    ->register    ->modify可是UserAction呢,想想UserAction几乎什么都不用做,只要调用service提供的接口就行了,这是不是有点傻瓜。为了让UserAction显得不那么傻瓜,我打算让UserService不那么”聪明“。UserService:    ->findUser    ->saveUser    ->modifyUser修改后的UserService"智商"下降了不少,现在的UserAction已经无法仅仅通过调用UserService提供的接口就能完成用户的登录和注册功能了。比如UserAction的登录方法:public String login(){    if(userService.findUser(email,password))    [        return SUCCESS;        }else{        return ERROR;    }}虽然只是多了点判断逻辑,但起码比直接调用一个接口看着舒服一点。可是问题似乎又来了,现在的UserService看起来和UserDao越来越像,UserDao本来已经实现的持久化操作,UserService又重新"抄袭"过来,这显得太多余了。所以这个平衡点该怎么把握呢?现在我来总结一下吧:首先第一种设计,我们把要直接提供给用户的服务封装到service中,虽然Action因此偷了一下“懒”,但起码有一点值得肯定,任何一个有英语基础的人,看到这个service的接口都知道我们提供了那些服务,换句话说我们的service似乎更像是服务层。第二种设计虽然可以让Action显得不那么“笨”,但是我们的service却像是一个累赘:一个dao的复制品。而且你无法通过这个service看出它所提供的服务。虽然叫做“service”但却把对服务的封装交给Action,自己只是提供了一些对数据库的CURD。有点逗你玩的感觉。不过我还是有一种类似于逃避的解决办法:当业务逻辑比较简单的时候,把service层去掉,直接在Action中调用dao接口。但既然service存在,就有存在的理由,一定存在一种均衡之道。最后说明,我不是在分享经验而是表达自己的疑惑(正如标题所言),我希望大牛们能为我指点迷津。
查看完整描述

目前暂无任何回答

  • 0 回答
  • 1 关注
  • 1810 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信