树莓派提升计划 Android应用用MiniChatApp架构组成与项目结构组成

2021SC@SDUSC

一、架构组成

1.ui架构

对于每一个主题,采用了activity+viewmodel+livedata+repository+datasource模式。我们设计应用时 您不应在应用组件中存储任何应用数据或状态,并且应用组件不应相互依赖,而是应该注意分离关注 点,模型驱动界面。 分离关注点是一个重要原则。一种常见的错误是在一个 Activity 或 Fragment 中编写所有代码。这些基 于界面的类应仅包含处理界面和操作系统交互的逻辑。您应使这些类尽可能保持精简,这样可以避免许 多与生命周期相关的问题。 另一个重要原则是您应该通过模型驱动界面(最好是持久性模型)。模型是负责处理应用数据的组件。 它们独立于应用中的 View 对象和应用组件,因此不受应用的生命周期以及相关的关注点的影响。 持久性是理想之选,原因如下: ①如果 Android 操作系统销毁应用以释放资源,用户不会丢失数据。 ②当网络连接不稳定或不可用时,应用会继续工作。 应用所基于的模型类应明确定义数据管理职责,这样将使应用更可测试且更一致。这样的架构下有三个优点,第一,结构精简且执行有效;第二点,便于测试,结构进行 分离,使得测试更加简单;第三点,代码具有更强的健壮性,在极端环境下,保证应用可使用。

 2.其他架构

(1)Room部分

Android采用Sqlite作为数据库存储。Sqlite代码写起来繁琐且容易出错,所以开源社区里逐渐出现了各种ORM(Object Relational Mapping)库。这些开源ORM库都是为了方便Sqlite的使用,包括数据库的创建,升级,增删改查等。常见的ORM有ORMLite,GreenDAO等。Google也意识到了推出自家ORM的必要性,于是有了Room。

Room和其它ORM库一样,也是在Sqlite上提供了一层抽象。

(2)网络部分

网络部分基于okhttp3库,Hp内封装了get方法,和post方法,实现http get和post方式。 hp接口,包装各个主题需要使用的网络请求,hpImpl中的类去实现接口。 

二、项目结构

1.java部分

(1)data

java部分共为六个模块,data部分是数据的获取模块,db是本地数据库sqlite设计,netservice是网络模 块,处理app与服务器的网络访问,ui是前端界面与事件响应设计模块,其余是主体activity,如图:

friends好友关系的数据源处理,home个人信息的数据源处理,login登录的数据源处理,model是使用 到的bean模型,Result是一个数据结果类,用来表示数据获取的成功与否。

如图:

(2)db 

dao表示数据库信息获取的sql处理语句类,model是本地数据库表的构建,appdatabase初始化本地数 据库。

如图:

(3)nerservice 

①Base网络访问的接口

②HpInterface 网络特定访问接口继承于Hp

③HpImpl 是网络接口的实现

④HpModel message是基本信息体,response中所有类均继承于message,request是请求结构的适 配体

(4)UI

表示各个主题的viewmodel与fragment设计

 (5)util(包含DownloadUtil和SHA-1加密算法)

SHA-1加密算法:

package com.example.minichatapp.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1 {
    public static String sha1(String data) throws NoSuchAlgorithmException {
        //加密算法
        MessageDigest md = MessageDigest.getInstance("SHA1");
        md.update(data.getBytes());
        StringBuffer buf = new StringBuffer();
        byte[] bits = md.digest();
        for(int i=0;i<bits.length;i++){
            int a = bits[i];
            if(a<0) a+=256;
            if(a<16) buf.append("0");
            buf.append(Integer.toHexString(a));
        }
        return buf.toString();
    }
}

SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。

该算法输入报文的长度不限,产生的输出是一个160位的报文摘要。输入是按512 位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。

通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值