• MVC层次的划分


     MVC,顾名思义就是Model、View以及Control。

      在J2EE中,一般由jsp扮演View层、servlet扮演Control层、java撰写Model层。

      众所周知java的好处就是跨平台:一次编写,各种编译。

      现在的问题是:

      什么样的操作应该有Control层来做,而什么样的操作应该由Model层来完成?

      划分方法:

      当某一个操作不知道该放在控制层做还是模型层的时候,可以问自己一个问题:

    如果从web应用改成桌面应用,那这个操作还需要做吗?

      如果回答是yes,那就放在model层,否则放着Control层。

      比如说有如图的一个操作

      显然,对电流值的大小的“判断”放在Control层或者放在Model层都是可以的。在Control层做好判断以后,再根据情况调用Model层的operation1或2,可以视作是Model层的细粒度封装。

      但是,考虑到J2EE中的控制层是用servlet来编写,如果现在工程要改变一种形式,比如,要变成web service + Client App的方式,那么Control层的代码显然就归到了Client端。对于Model层,由于是java编写,因此即使变成web service,那么整个model层的代码和原先的operations还是可用的。但是Control层就要根据client端的平台(可能是PC机要用C#,移动终端要用android或IOS)的不同而改变。

      如果将“判断”放到了Control层,那么显然要在各个不同的终端版本上用各种语言编写这个“判断”,而这个工作完全是重复性的。并且,如果判断的方式改变了,比如不是按照阈值判断,而是分成不同的电流层次,如3层、5层等,那么终端的程序就需要升级才能适应新的业务要求。

      有人也许要说,之所以一开始设计成web应用就是为了通过浏览器实现“一次编写,到处运行”的目的。但是,在这个移动终端越来越火的年代,很难保证某个应用会不会需要开发终端平台,以用来替代浏览器的展示方式。(比如,土豆等原先纯浏览器模式的厂商也推出了移动终端版本的APP)

      所以,控制层应该更多的扮演一种封装界面接口数据并转发的角色,而不应该过多的参与到业务逻辑判断中去。并且,方式2也更符合“高内聚、低耦合”的理念。

      

  • 相关阅读:
    hibernate关联关系(多对多)
    hibernate关联关系(一对多)
    hibernate主键生成策略
    hibernate01
    利用Struts2拦截器完成文件上传功能
    layui的CRUD案列
    Struts2的CRUD
    Git中.gitignore文件不起作用
    在 Visual Studio 中使用 Q# 进行量子编程
    Elasticsearch 搜索
  • 原文地址:https://www.cnblogs.com/elaron/p/2751747.html
Copyright © 2020-2023  润新知