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

发布于 2021-12-02 16:21:34 字数 896 浏览 722 评论 4

@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出来。这样会影响到系统性能吗?如果改进的话,我应该怎么写比较好?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

筱果果 2021-12-04 18:02:26

恍然大悟,感谢jfinal!

想挽留 2021-12-04 16:53:47

回复
dao 从 model 中删除,移到 service 中是强列提倡的作法,以前在model中写dao,一是容易误用非查询方法,二是容易让用户随意写查询,查询数据库的代码一定要写在业务层中

终陌 2021-12-04 07:10:50

如果 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 一定要是线程安全的才可以全局共享

拍不死你 2021-12-04 05:55:08

改成在  Dao 和service 里面  public static Dao dao =new Dao()    service 也一样 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文