帮我看看我的controller、service、model这样分层对吗?

木易大虾 发布于 2016/07/08 14:13
阅读 1K+
收藏 1

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

@JFinal 你好,想跟你请教个问题:

假设我做一个任务管理的模块

这个是model:

public class Task extends Model<Task> {

}

然后这个是service:

public class TaskService {

    private final Task taskDao = new Task();
    private final Role roleDao = new Role();
    private final User userDao = new User();

    ...

}
下面是控制器controller:

public class TaskController extends BaseController {

    private TaskService taskService = enhance(TaskService.class);

    ...
}

像我这样子的用法对吗?我测了一下每次controller里面的方法被调用,service都会new 一个出来,这样好吗?TaskService里面的dao也是一样,应该都是新new出来。这样会影响到系统性能吗?如果改进的话,我应该怎么写比较好?

加载中
0
12叔
12叔
改成在  Dao 和service 里面  public static Dao dao =new Dao()    service 也一样 
0
JFinal
JFinal

如果 Service 是无状态的,可以这样:

public class TaskService {

  public static final TaskService me = Duang.duang(TaskService.class);

  private final Task taskDao = new Task();
  private final Role roleDao = new Role();
  private final User userDao = new User();

  ...
}
   这样就可以在使用的地方不需要创建新对象了,controller 中可以这样:
public class TaskController extends Controller {

  TaskService taskService = TaskService.me;
  ...
}
   注意这里的 Service 一定要是线程安全的才可以全局共享
JFinal
JFinal
回复 @木易大虾 : dao 从 model 中删除,移到 service 中是强列提倡的作法,以前在model中写dao,一是容易误用非查询方法,二是容易让用户随意写查询,查询数据库的代码一定要写在业务层中
木易大虾
木易大虾
恍然大悟,感谢jfinal!
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部