記一次業餘項目的敏捷開發實踐

来源:https://www.cnblogs.com/cqhaibin/archive/2020/03/15/12499521.html
-Advertisement-
Play Games

本次是在原有ApiTemplate項目之上,增加一個用戶登錄許可權控制模塊,用於驗證ApiTemplate項目在面對一些簡單問題時,如何抽象並支持未來的擴展。用戶登錄許可權控制模塊看上去很簡單,但由於業餘時間總是有限的。所以藉助此機會實踐一次用戶敏捷開發。首先拆分模塊,本次只實現用戶登錄和登出。apit ...


      本次是在原有ApiTemplate項目之上,增加一個用戶登錄許可權控制模塊,用於驗證ApiTemplate項目在面對一些簡單問題時,如何抽象並支持未來的擴展。用戶登錄許可權控制模塊看上去很簡單,但由於業餘時間總是有限的。所以藉助此機會實踐一次用戶敏捷開發。首先拆分模塊,本次只實現用戶登錄和登出。

apitemplate項目地址:https://github.com/cqhaibin/ApiTemplate

一、總結放前面

最小化任務範圍

  • 本次任務只限定在了《用戶名+密碼登錄》這個任務上,並且不包含數據的持久化, 這樣在做的時候反覆考查自己,不讓自己超出範圍。所以
  • 查詢用戶註冊信息、線上用戶存儲相關介面只做定義和模擬實現,不做具體的存儲實現
  • 考慮到業務邏輯是穩定的,而存儲是可變的,所以資料庫實體對象與業務實體對象分離

給任務一個期限

像本次就只列出了任務的期限,而沒有列出每個子階段的期限,如:一個需求必須要經過需求分析、模塊設計、代碼實現等階段。這些子階段也需要給出具體的期限。

從外向里逐層推進

  • 定義UI/服務層介面
    因為UI介面有多種提供方式(如:rest api, rpc等),所以基本以服務層介面為標準,UI介面層只是做了一次簡單轉換和調用。其中UI/服務層介面輸入/輸出參數的Moddel也隨之定義(兩層共用Model)
  • 實現服務層介面
    此步實現服務層介面,你會發現還需要依賴線上用戶管理模塊,以及資料庫層(查詢註冊用戶信息),在這裡我只定義了查詢註冊用戶信息的介面,而暫不做具體的實現。然後進入第三步
  • 定義線上用戶模塊的介面
    此步包含:線上用戶管理實體介面、線上用戶實體介面。定義好後先不實現。完善服務層實現中對此模塊的依賴調用,在這裡你可能會反覆調整線上用戶模塊的方法輸入/輸出參數的Model,以達到與服務層的融合
  • 實現線上用戶模塊的介面
    此步實現 線上用戶管理實體介面、線上用戶實體介面。此時我們發現還要依賴線上用戶存儲介面(只定義,不做實現)

二、用戶需求

實現根據用戶名的登錄、登出介面。

三、需求分析

  • 用戶名:支持英文、數字、漢字、以及特殊字元;用戶名不區分大小寫
  • 密碼:支持英文、數字、特殊字元,區分大小寫
  • 提示:用戶不存在與密碼錯誤要區分提示
  • 此階段不考慮數據持久化,因為要快速驗證原型的可行性

四、系統設計

介面設計

介面統一使用rest api, 實現登錄、登出兩個介面

  • 登入介面
    • 介面名:PostLogin
    • 請求類型:post
    • 輸入參數
    {
        userName<string>, //用戶名
        password<string> //密碼
    }
    • 返回參數
    {
        isSuccess<bool>, //請求是否成功
        resultCode<number>, //請求狀態Code 200006:賬號不存在;200001:賬號被禁用;200002:密碼錯誤
        data<object>:{
            token<string> //登錄成功後,返回的token
            user<object>:{ //用戶對象
                realName<string>, //用戶名
                userName<string>, //登錄名
                id<int>, //用戶Id
                config<string>, //用戶擴展信息,json字元串
                mobilePhone<string>, //電話號碼
            }
        }
    }
  • 登出介面
    • 介面名稱:LoginOut
    • 請求類型:get
    • 輸入參數
      通過url, header, cookie的順序獲取token
    • 返回參數
    {
        isSuccess<bool>, //請求是否成功
        resultCode<number>, //請求狀態Code
    }

詳細設計

登入介面詳細設計

  • 流程
    image
  • 線上用戶管理
    • 線上用戶管理介面類
    class IOnlineUserMgr{
        /// <summary>
        /// 將用戶添加到線上用戶列表,此方法需要對登入信息持久化
        /// </summary>
        /// <param name="entity"></param>
        void Add(IUserEntity entity);
        /// <summary>
        /// 根據token移除對應的用戶,此方法需要對登出信息持久化
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        bool Remove(string token);
        /// <summary>
        /// 根據用戶Id移除用戶,此方法需要對登出信息持久化
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        bool Remove(int id);
        /// <summary>
        /// 從持久化層恢覆在線用戶
        /// </summary>
        void Load();
        /// <summary>
        /// 獲取所有線上用戶
        /// </summary>
        IList<IUserEntity>  GetAll();
    
        IUserEntity Get(int userId);
    }
    • 用戶實體介面類
    class IUserEntity{
        UserInfo UserInfo { get; }
    
        string Token { get; }
    
        /// <summary>
        /// 客戶端信息
        /// </summary>
        RequestClientInfo ClientInfo { get; }
    
        DateTime LoginTime { get; }
    
        DateTime ExpiredTime { get; }
        /// <summary>
        /// 用戶登錄配置
        /// </summary>
        UserAuthOption Option { get; }
    
        TokenEntity GetTokenEntity();
    }
  • 說明
    • token生成規則
      用戶key = token_UserId_UserName_IP_OS_Time,然後將用戶key通過MD5計算出的值作為token
    • UAParser
      實現UserAgent字元串到對象的轉換。

登出介面詳細設計

  • 流程

image

五、數據字典

  • 線上用戶信息

image

  • 用戶

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、逢7跳過小游戲:從1-100之間,遇到帶7的數字或者7的倍數跳過。 1 for i in range(1,101): 2 if i == 7 or i % 10 == 7 or i // 10 == 7: 3 continue 4 else: 5 print(i,end = ",") 2、七段數 ...
  • In [1]: import os import matplotlib.image as mpimg from PIL import Image import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl m ...
  • Redis 在當前的技術社區里是非常熱門的。從來自 Antirez 一個小小的個人項目到成為記憶體數據存儲行業的標準,Redis已經走過了很長的一段路。 隨之而來的一系列最佳實踐,使得大多數人可以正確地使用 Redis。 下麵我們將探索正確使用 Redis 的10個技巧。 1、停止使用 KEYS Ok ...
  • 最近在使用ASP.NET Core的時候出現了一個奇怪的問題。在一個Controller上使用了一個ActionFilter之後經常出現EF報錯。 這個異常說Context在完成前一個操作的時候第二個操作依據開始。這個錯誤還不是每次都會出現,只有在併發強的時候出現,基本可以判斷跟多線程有關係。看一下 ...
  • 如何自行實現一個多租戶系統 註意:前情概要描述的文字比較多,說的是我的思考過程,不感興趣的可以直接到跳到 “解析租戶信息” 一節。 現如今框架滿天飛的環境下,好像很少機會需要自己來實現一個模塊。畢竟這樣能節省很多的開發時間,提高效率。 這就是框架的好處,也是我們使用框架的直接原因。 情況總有例外,假 ...
  • 前言 我們一般可以在Linux伺服器上執行 命令來運行我們的.net Core WebApi應用。但是這樣運行起來的應用很不穩定,關閉終端視窗之後,應用也會停止運行。為了讓其可以穩定運行,我們需要讓它變成系統的守護進程,成為一種服務一直在系統中運行,出現異常時也能重新啟動。 Linux系統有自己的守 ...
  • 前言 在探究地球內部的結構中,如何做到在地球錶面不用深入地球內部就可以知道內部的構造呢?其實,向地球發射“地震波”。利用這種方式,可以判斷地球放回的情況,大體上,我們也可以斷定地球內部的構造了。 從這個例子中,通過一個對象的外部去瞭解對象內部的構造,都是利用了波的反射功能。而利用這種原理,在編程程式 ...
  • 目 錄 1. 概述... 2 2. iNeuOS平臺演示... 2 3. 設備驅動管理... 2 4. 服務驅動管理... 3 5. 雲組態自定義畫布... 4 6. 快速切換組態頁面菜單... 5 7. 自定義右鍵菜單項,顯示組態子頁面... 5 8. 工況關聯數據點... 6 9. 修改用戶密碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...