java – Struts2 – 多种方法的动作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Struts2 – 多种方法的动作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4595字,纯文字阅读大概需要7分钟。
内容图文
![java – Struts2 – 多种方法的动作?](/upload/InfoBanner/zyjiaocheng/785/06afb748e5b14c17af5d2983971f4453.jpg)
我是这个网站的新手,这是我的第一个问题.
我必须做一个网站,我正在使用java和Struts2,但我是Struts2的新手.
在我的网站中,我必须向Facebook提出请求并通过OAuth进行身份验证.
我正在执行操作页面的执行方法中的所有过程(验证和请求受保护的资源),这个过程非常复杂,并且在Facebook和我的网络之间有很多重定向.
前几天我读到了“不要用多种方法创建动作:”执行“并且你要执行的操作(例如”createUser“)应该足够”(从http://freeopenidea.blogspot.com.es/2010/04/struts2-best-practices.html开始).
大多数代码可以在另一个时刻从我的网站的另一部分调用,因为我在第一次连接时执行此过程但我可以执行此操作(或类似的东西)来刷新联系人列表.
1 – 我应该为我需要的方法创建一个单独的类(不是动作),并从“execute”方法调用它们吗?
2 – 我应该将代码保留在操作页面中,而不是“执行”之外的方法吗?每当我需要完成一些任务时,请调用此页面.
我不知道在哪里放置代码(我知道,我必须存储de accessToken.我只是粘贴代码来显示复杂性,但不要查看更正).
public String execute() throws Exception{
if (code!=null){
Verifier verifier = new Verifier(code);
//get the accessToken to do requests
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
OAuthRequest requestList = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
service.signRequest(accessToken, requestList);
Response responseList = requestList.send();
if (responseList.getCode() == 200){
//I get the Friends List
JsonParse parser = new JsonParse();
JSONObject json = (JSONObject) JSONSerializer.toJSON(responseList.getBody());
JSONArray datos = json.getJSONArray("data");
for (Object o : datos)
{//for every friend of the list I do this
JSONObject elem = (JSONObject) o;
String id = elem.getString("id");
OAuthRequest requestFriend = new OAuthRequest(Verb.GET,"https://graph.facebook.com/"+id);
service.signRequest(accessToken, requestFriend);
Response responseFriend = requestFriend.send();
if (responseFriend.getCode() == 200){
JsonParse parserAux = new JsonParse();
PerfilContacto pcBean = parserAux.parseFacebookElement(responseFriend.getBody());
pcDAO.insertarContacto(pcBean);
}
}
}
return SUCCESS;
}
else return ERROR;
}
解决方法:
IMO在动作方法中的代码太多了.操作应该处理Web和业务层之间的层,而不是其他.这种级别的耦合,特别是对于硬编码的类实例化,使得很难单独测试动作的逻辑.
将所有代码基本上移到服务中.该操作仅涉及服务交互.该框架验证了代码的存在.该服务在Struts 2之外进行测试.该操作使用模拟服务进行测试.
完全未经测试,但我怀疑我的代码看起来更接近下面的内容.它将一种复杂性换成另一种,但带来了多种好处.每种方法都紧密集中且易于阅读.服务调用是隔离的,这允许我们测试不同的服务失败模式.它是系统行为和功能的粒度表示.
行动
public String execute() throws Exception {
fbService.updateFriends(code);
return SUCCESS;
}
FB服务
public void updateFriends(String code) {
Token accessToken = getAccessToken(code);
Response response = getFriends(accessToken);
if (response.getCode() == 200) {
processFriends(accessToken, response);
}
}
private void processFriends(Token accessToken, Response response) {
JSONObject json = (JSONObject) JSONSerializer.toJSON(response.getBody());
JSONArray datos = json.getJSONArray("data");
for (Object o : datos) {
JSONObject friend = (JSONObject) o;
processFriend(friend);
}
}
private void processFriend(Token accessToken, JSONObject friend) {
Response response = getFriendGraph(accessToken, friend.getString("id"));
if (response.getCode() == 200){
PerfilContacto pcBean = new JsonParse().parseFacebookElement(response.getBody());
pcDAO.insertarContacto(pcBean);
}
}
//~ Service interaction
private Response getFriends(Token accessToken) {
return sendSignedGetRequest(PROTECTED_RESOURCE_URL, accessToken);
}
private Response getFriendGraph(Token accessToken, String id) {
return sendSignedGetRequest("https://graph.facebook.com/" + id, accessToken);
}
private Token getAccessToken(String code) {
return service.getAccessToken(EMPTY_TOKEN, new Verifier(code));
}
private Response sendSignedGetRequest(String url, Token accessToken) {
OAuthRequest request = new OAuthRequest(Verb.GET, url);
service.signRequest(accessToken, request);
return request.send();
}
如果我们考虑指标,我们最终会得到以下结果.
原版的:
Average Function NCSS: 24.00
Average Function CCN: 6.00
Program NCSS: 25.00
重做:
Average Function NCSS: 3.63
Average Function CCN: 1.38
Program NCSS: 31.00
最终,它意味着:
>重要LOC的数量没有增加太多.
>每个功能都是< 4行长(易于阅读).
>每个函数的圈复杂度是< 2(易于测试和推理).
>程序读起来更像它正在做的事情,允许更快的理解.
权衡是我们有更多的方法(鉴于任何合理的IDE或文本编辑器,这不应该是一个巨大的问题),这是一种复杂性.然而:
>我们可以在我们选择的深度停止阅读.
>我们可以更大的粒度进行测试.
>我们可以确定我们可能错过的成功/失败模式.
>我们可以更轻松地交换和/或扩展功能.
内容总结
以上是互联网集市为您收集整理的java – Struts2 – 多种方法的动作?全部内容,希望文章能够帮你解决java – Struts2 – 多种方法的动作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。