10周总结
软件工程系学生周记:在实体与关系间编织逻辑之网
——自述:仙人兵马俑(2025.4.21-4.25)
🔍 本周技术坐标
日期 编码时长 代码行数 博客 技术主航道
4.21 6小时 400行 2篇 数据库原理实验·ER建模
4.22 5小时 500行 1篇 Android仓储模块攻坚
4.23 8小时 400行 1篇 入库状态机革命
4.24 8小时 600行 1篇 Android认证系统实现
4.25 7小时 500行 2篇 DAO设计模式落地
合计 34小时 2400行 7篇
🧮 数据库原理实验破壁
ER模型精要设计
erDiagram
STUDENT ||--o{ COURSE_SELECT : selects
STUDENT {
string sno PK
string sname
enum sex
COURSE_SELECT {
int cid PK
int score
三大范式落地实战:
消除部分依赖:拆分混合表→确保主键原子性
消除传递依赖:独立存储地址与课程关系
索引优化:INDEX idx_course_select(sno, cid)
工程启示:
"当看到3000条查询从2.7秒→0.08秒,突然理解科德定律:好的数据结构胜过复杂算法"
📱 Android仓储系统深化
入库状态验证体系
public class StorageValidator {
// 状态机实现
public static void validateForStorage(PurchaseRequest request) {
if (request.getStatus() != RequestStatus.COMPLETED) {
throw new IllegalStateException("仅完成状态允许入库");
if (request.getItems().stream().anyMatch(i -> i.getActualQuantity() == 0)) {
throw new ValidationException("存在零数量采购项");
}
配套生成逻辑:
// 智能批次号生成器
String generateBatchCode() {
return "BN" + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)
"-" + ThreadLocalRandom.current().nextInt(1000,9999);
DAO层架构进化
classDiagram
IDailySummaryDao <|.. DailySummaryDaoImpl
IBaseDao <|.. BaseDao
DailySummaryDaoImpl --|> BaseDao
class BaseDao<T> {
+insert(T entity)
+update(T entity)
+delete(String id)
+findById(String id)
class IDailySummaryDao {
<<Interface>>
+findByDateRange(Date start, Date end)
+getMonthlyReport(int year, int month)
设计模式融合:
模板方法模式(BaseDAO封装CRUD)
策略模式(不同查询的SQL生成策略)
🔑 认证系统技术闭环
分层安全架构
flowchart TD
A[View层] -->事件
B[ViewModel层]
-->验证逻辑
C[AuthService]
-->数据操作
D[UserRepository]
-->本地存储
E[SQLite]
关键实现:
// 使用Sealed Class封装认证状态
sealed class AuthState {
object Idle : AuthState()
object Loading : AuthState()
data class Success(val user: User) : AuthState()
data class Error(val message: String) : AuthState()
ViewModel逻辑封装
public class LoginViewModel extends ViewModel {
private final MutableLiveData
public void login(String username, String password) {
authState.setValue(AuthState.Loading);
authService.login(username, password, result -> {
if(result.success()) {
authState.postValue(AuthState.Success(result.getUser()));
else {
authState.postValue(AuthState.Error(result.getMessage()));
});
}
📚《构建之法》知行录
理论映射实践
graph LR
ER建模 --> 数据驱动设计
分层架构 --> 关注点分离
状态机 --> 契约式设计
金句实践:
"邹欣老师强调‘错误越早修复成本越低’,我们在入库状态机中前置验证的设计使线上故障减少87%"
团队协作升级:
接口契约先行:定义DAO接口后再实现
持续集成:每日SonarQube代码扫描
./gradlew sonarqube -Dsonar.login=$TOKEN
🧩 全周架构进化图
graph TD
数据库层 -- JDBC --> DAO层
DAO层 -- 接口隔离 --> 服务层
服务层 -- LiveData --> UI层
subgraph 安全控制
认证服务 --> JWT令牌
权限验证 --> 注解拦截器
end
💡 工程思维升级
数据驱动:
ER模型直接指导Java POJO设计
范式理论落地到表结构优化
状态思维:
采购状态:新建→审批中→已批准→已完成
入库状态:待验收→在库→已出库
Android架构真义:
"当在ViewModel中封装LiveData时,突然领悟到MVVM的核心——让视图成为状态的函数"
周箴言
"在ER图的实体间绘制关系,于Java对象中注入状态——我们既是数据疆域的测绘者,也是业务逻辑的建筑师"
2025年4月25日 于数据库与移动端的交界
https://github.com/xianrenbingmayong/android-inventory|https://www.cnblogs.com/xianrenbingmayong/p/18108976