热词分析系统可修改性战术分析
Posted mawangwang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了热词分析系统可修改性战术分析相关的知识,希望对你有一定的参考价值。
可修改性描述了程序能够被正确修改的难易程度。
可修改性主要关注两个问题:一,可以修改什么,可以修改系统的任何方面,最常见的就是系统计算的功能、系统存在的平台(硬件、操作系统和中间件等)、系统运行的环境(它必须与之互操作的系统,它用于与其他部分进行通信的协议,等等)、系统所展示的质量属性(其性能、可靠性、战至包括将来的可修改性)以及其容量(所支持的用户数量、同时发生的操作的数量,等等)。系统的某些部分(如用户界面或平台)可以分离出来,它们很容易发生变化.我们将对其进行单独讨论。平台种类的变化还被称为可移植性。这些变化可能是增加、删除或修改这些方而中的任何一个;二,何时进行变更以及由谁进行变更,过去最常见的是修改源代码。也就是说.开发人员必须修改代码,对修改后的代码进行测试,然后将其部署在新版本中。然而,现在不仅仅足何时变更的问题,而且还有由谁进行变更的问题。最终用户改变屏保很明显就是改变了系统的一个方面。同样明显的是,它与改变系统并不属于同一类,因此可以通过 Web 而非在一台机器上使用它。可以在编译期间(使川编译时切换)、构建期间(通过选择库)、配置设置期间(通过一系列手段,包括参数设置)或执行期间(通过参数设置)改变实现(通过修改源代码)。变更还可以由开发人员、最终用户或系统管理员进行。
--软件架构实践原文
说的通俗易懂一点,可修改性战术就是运用一些方法使得软件在一定时间和预算内完成、测试和部署变更,绝对不能出现牵一发而动全身或蝴蝶效应之类的情形,也就是防止连锁反应。
下面,我将以我自己开发的热词分析系统为原型,阐述可修改性战术策略:分层处理,降低系统的耦合性。
Web网页请求数据库中储存的热词过程:
1.数据库连接类,DBUtil.java
1 package com.wang.util; 2 3 import java.sql.*; 4 5 public class DBUtil { 6 private static String driver; 7 private static String url; 8 private static String username; 9 private static String password; 10 11 static { 12 driver = "com.mysql.jdbc.Driver"; 13 url = "jdbc:mysql://127.0.0.1:3306/wang?useSSL=false&characterEncoding=utf8"; 14 username = "root"; 15 password = "123456"; 16 try { 17 Class.forName(driver); 18 } catch (ClassNotFoundException e) { 19 e.printStackTrace(); 20 } 21 } 22 23 public static Connection getConn() throws SQLException { 24 return DriverManager.getConnection(url, username, password); 25 } 26 27 public static void close(Connection conn, Statement st, ResultSet rs) { 28 try { 29 if (conn != null) { 30 conn.close(); 31 } 32 if (st != null) { 33 st.close(); 34 } 35 if (rs != null) { 36 rs.close(); 37 } 38 } catch (SQLException e) { 39 e.printStackTrace(); 40 } 41 } 42 }
2.Service层
1 package com.wang.service; 2 3 import com.wang.service.TopSearchService; 4 import com.wang.util.DBUtil; 5 import java.sql.Connection; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 import java.util.ArrayList; 10 import java.util.List; 11 12 public class TopSearchService{ 13 private Connection connection = null; 14 private Statement statement = null; 15 private ResultSet resultSet = null; 16 17 @Override 18 public List<String> list() { 19 String sql = "select title from info order by clickCount desc"; 20 List<String> list = new ArrayList<>(10); 21 try { 22 connection = DBUtil.getConn(); 23 statement = connection.createStatement(); 24 resultSet = statement.executeQuery(sql); 25 while (resultSet.next()) { 26 list.add(resultSet.getString("title")); 27 } 28 } catch (SQLException e) { 29 e.printStackTrace(); 30 } finally { 31 DBUtil.close(connection, statement, resultSet); 32 } 33 return list; 34 } 35 36 37 }
3.Servlet层
1 package com.wang.servlet; 2 3 4 import com.wang.service.TopSearchService; 5 import com.wang.service.TopSearchServiceImpl; 6 7 import java.io.IOException; 8 import java.io.PrintWriter; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.annotation.WebServlet; 12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 import java.util.List; 16 /** 17 * Servlet implementation class TopSearchServlet 18 */ 19 @WebServlet("/TopSearchServlet") 20 public class TopSearchServlet extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 TopSearchService topSearchService=new TopSearchService(); 23 /** 24 * @see HttpServlet#HttpServlet() 25 */ 26 public TopSearchServlet() { 27 super(); 28 // TODO Auto-generated constructor stub 29 } 30 31 /** 32 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 33 */ 34 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 //设置跨域请求 36 response.setHeader("Access-Control-Allow-Origin","*"); 37 //处理中文乱码 38 response.setContentType("text/html;charset=utf-8"); 39 //获取热搜列表 40 List<String> lists=topSearchService.list(); 41 PrintWriter out=response.getWriter(); 42 if (lists.size() > 0) { 43 out.println(toJson(lists)); 44 } 45 } 46 47 public static String toJson(List<String> list) { 48 String data = ""; 49 int count=1; 50 for (String str : list) { 51 // "1":"title1","2":"title2", 52 data+="""+count+"":""+str+"","; 53 count++; 54 } 55 data+=""length":"+count; 56 return "{"+data+"}"; 57 } 58 59 60 /** 61 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 62 */ 63 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 64 // TODO Auto-generated method stub 65 doGet(request, response); 66 } 67 68 }
4.ajax技术,请求servlet页面获取数据,传到index页面
1 $(function () { 2 $.ajax({ 3 url: "http://localhost:8080/HotCi/TopSearchServlet", 4 success: function (data) { 5 //存放热搜列表 6 var json = JSON.parse(data); 7 var li; 8 for (var i = 1; i < json.length; i++) { 9 if(i<=20){ 10 li = "<li><span>"+i+"</span><span>" + json[i] + "</span></li>"; 11 $("#list1").append($(li)); 12 }else if(i<=40){ 13 li = "<li><span>"+i+"</span><span>" + json[i] + "</span></li>"; 14 $("#list2").append($(li)); 15 }else{ 16 li = "<li><span>"+i+"</span><span>" + json[i] + "</span></li>"; 17 $("#list3").append($(li)); 18 } 19 } 20 } 21 }); 22 });
5.index页面
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>信息领域热词</title> 6 <script src="js/jquery-3.4.1.min.js"></script> 7 <style type="text/css"> 8 h2{text-align:center;} 9 ul{list-style:none;font-size:25px;padding-left:200px;} 10 span{margin-right:30px;} 11 a{font-size:20px;} 12 small{margin-left:35px;} 13 </style> 14 </head> 15 <body> 16 <h2>2019信息领域热词排行榜<small><a href="echarts_word.html">热词字符云图</a></small><small><a href="guanxi.html">热词关系图</a></small></h2> 17 <div> 18 <div style="float:left;"><ul id="list1"></ul></div> 19 <div style="float:left;"><ul id="list2"></ul></div> 20 <div style="float:left;"><ul id="list3"></ul></div> 21 <script src="js/search.js"></script> 22 </div> 23 </body> 24 </html>
通过这样一层一层,实现了前端页面访问数据库的操作。可修改的体现:
1.数据库更换,修改DBUtill.java文件即可。
2.数据表更换,修改持久层中表名即可。
3.添加功能,在service中定义新的函数。
下面是字符云图和关系图,调用第三方插件echarts实现,这其中蕴含可修改性的地方便是传递数据。数据不同,最后形成的图形自然也不一样。
热词分析系统:http://114.116.254.76:8080/HotCi/guanxi.html
以上是关于热词分析系统可修改性战术分析的主要内容,如果未能解决你的问题,请参考以下文章