易用性战术补充内容为易用性战术使用方法——分离用户接口。
分离用户接口是指只给用户留下有限的、按规则调用的用户可以看到的内容,其余的都会隐藏在后台中,这样做的好处是不仅满足了前后端高内聚,低耦合的开发原则,还使得代码的开发成本降低、维护效率提高。比较常见的分离模式是前端利用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界面得到的内容,却不能看到开发者是如何查询到这些内容的,同时也不会看到相关代码,避免信息泄露,也相应减轻了开发者维护代码的难度。