质量属性之易用性战术补充

  易用性战术补充内容为易用性战术使用方法——分离用户接口。

  分离用户接口是指只给用户留下有限的、按规则调用的用户可以看到的内容,其余的都会隐藏在后台中,这样做的好处是不仅满足了前后端高内聚低耦合的开发原则,还使得代码的开发成本降低、维护效率提高。比较常见的分离模式是前端利用ajax向后台请求数据,后台查询数据并打包成json格式返回到前台,由前台解析成可视化数据。

 1 $.ajax({
 2             type : "POST", //请求方式  
 3             url : "${pageContext.request.contextPath}/Querymain", //请求路径 
 4             traditional : true,//据说可以阻止jQuery对数组的深度序列化
 5             cache : false,
 6             data : {//传参  
 7                 "Id" : id
 8             },
 9             
10             dataType : 'json', //返回值类型  
11             success : function(data) {
12                 /*  alert(json[0].username+" " + json[0].password);    //弹出返回过来的List对象  
13                  alert(json[1].username+" " + json[1].password);    //弹出返回过来的List对象 */
14                 var jsonArray = data;
15                 for (var i = 0; i < data.length; i++) {
16                     alert(data[i].getPingtaimingcheng + " "
17                             + data[i].getDiaochaniandu);
18                     s = "<tr><td>" + data[i].pingtaimingcheng + "</td><td>"
19                             + jsonArray[i].diaochaniandu + "</td><td>"
20                             + jsonArray[i].tianbiaoren + "</td><td>"
21                             + jsonArray[i].tianbaoshijian + "</td><td>"
22                             + jsonArray[i].dangqianzhuangtai + "</td><td>"
23                             + jsonArray[i].shenhejindu + "</td></tr>";
24                     $("#tab").append(s);
25                 }
26             },
27             error : function(errorInfo) {//打印错误信息
28                 console.log(errorInfo);
29             }
30         });

  可以看到上述的代码,使用ajax向后台请求数据,然后将发送回来的json数据重新“解压”成可以读懂的方式。

  除此之外,更加常见的分离用户接口的例子是大名鼎鼎的MVC架构,即Model—View-Controller模型-视图-控制器模式,它的核心思想就是典型的“职责分离”,Model数据层负责数据库数据的增删改查,View视图层负责做html页面的展示Controller逻辑层负责书写业务逻辑。事实上,Javabean+servlet+jsp同样是一种实现分离用户接口的方法。

  Javabean负责定义私有属性,使得用户不能直接调用属性,同时定义属性方法,使得开发者可以任意组装想要的属性接口方便调用。一般的Javabean结构如下:

public class majorbean {
    
    private int id;//���
    private String reseachdirect;//�����
    private String reseachcontent;//�����
    private String reseachname;//���������
    private String qulification;//�о��������ʵȼ�
    private String qulificationapartment;//�������ʲ���
    private String basename;//����������(����)����
    private String belongunit;//���ڵ�λ
    private String serviceproject;//������Ŀ
    private String servicecontent;//��������
    
    public majorbean() {
        super();
    }
    
    public majorbean(String reseachdirect, String reseachcontent) {
        super();
        this.reseachdirect = reseachdirect;
        this.reseachcontent = reseachcontent;
    }
    
    public majorbean(String reseachname, String qulification, String qulificationapartment) {
        super();
        this.reseachname = reseachname;
        this.qulification = qulification;
        this.qulificationapartment = qulificationapartment;
    }
    public majorbean(String reseachdirect, String reseachcontent, String reseachname, String qulification,
            String qulificationapartment, String basename, String belongunit, String serviceproject,
            String servicecontent) {
        super();
        this.reseachdirect = reseachdirect;
        this.reseachcontent = reseachcontent;
        this.reseachname = reseachname;
        this.qulification = qulification;
        this.qulificationapartment = qulificationapartment;
        this.basename = basename;
        this.belongunit = belongunit;
        this.serviceproject = serviceproject;
        this.servicecontent = servicecontent;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getReseachdirect() {
        return reseachdirect;
    }
    public void setReseachdirect(String reseachdirect) {
        this.reseachdirect = reseachdirect;
    }
    public String getReseachcontent() {
        return reseachcontent;
    }
    public void setReseachcontent(String reseachcontent) {
        this.reseachcontent = reseachcontent;
    }
    public String getReseachname() {
        return reseachname;
    }
    public void setReseachname(String reseachname) {
        this.reseachname = reseachname;
    }
    public String getQulification() {
        return qulification;
    }
    public void setQulification(String qulification) {
        this.qulification = qulification;
    }
    public String getQulificationapartment() {
        return qulificationapartment;
    }
    public void setQulificationapartment(String qulificationapartment) {
        this.qulificationapartment = qulificationapartment;
    }
    public String getBasename() {
        return basename;
    }
    public void setBasename(String basename) {
        this.basename = basename;
    }
    public String getBelongunit() {
        return belongunit;
    }
    public void setBelongunit(String belongunit) {
        this.belongunit = belongunit;
    }
    public String getServiceproject() {
        return serviceproject;
    }
    public void setServiceproject(String serviceproject) {
        this.serviceproject = serviceproject;
    }
    public String getServicecontent() {
        return servicecontent;
    }
    public void setServicecontent(String servicecontent) {
        this.servicecontent = servicecontent;
    }
    

}

  可以看到的是,属性是private,不允许随意调用,方法都是public,可以任意调用。这样就为开发者留出可使用接口操作。然后在servlet中,可以创建该Javabean的实例,然后进行组装、使用。

majorbean major = new majorbean();
major.setReseachname(reseachname);

  最后,由servlet发送到客户端即jsp中(或者像上面说的,ajax请求数据),由jsp负责解析数据并展示给用户。Javabean、servlet和jsp就构成了一个分离用户接口的模型。用户只能看到在jsp界面得到的内容,却不能看到开发者是如何查询到这些内容的,同时也不会看到相关代码,避免信息泄露,也相应减轻了开发者维护代码的难度。

  

原文地址:https://www.cnblogs.com/YXSZ/p/12454134.html