java ddd 領域事件_Cribbb基于DDD/Domain Event領域事件的開源PHP通知系統

Cribbb是一個使用DDD聚合根和領域事件Domain Events概念開發的PHP開源通知框架:cribbb/cribbb · GitHub

幾乎所有Web應用都有一個通知提醒系統,這些通知系統都有共有的屬性和功能:

一個發往用戶的消息管道

Cribbb通知系統扮演一種消息管道,通知用戶最近的事件,有許多不同的“鉤子”可以觸發通知添加到用戶的消息管道中。

一個消息可以是任何類型

有許多不同的通知類型,針對應用中發生的不同的可能動作。

應當由可讀和未讀狀態

通知消息應該有狀態,一旦用戶有打開動作從而改變通知消息的狀態,這是很重要的用戶界面設計。

發送Email和作為UI一部分現實

默認情況用戶會收到一份Email,和用戶界面提醒一樣,用戶可以關閉郵件通知。

一個動作可以引起許多通知

在Cribbb中一個動作可以引起發給一個或多個用戶的通知,這意味著應當在動作和通知之間解耦。

通知消息應該被隊列化

使用隊列系統發送通知,因為針對一個動作可能有大量Email發送,通知發送不必即時。

通知是發送給用戶的一個消息,告訴他們他們對應用中感興趣的事件發生了,也許是一個用戶follow了他,或回復了他的帖子。

Domain Events是易于針對應用中事件的發生實現相應的通知機制的,當一個領域事件發送時,注冊的監聽器類將自動引爆,這樣動作和事件實現解耦,我們可以根本無需接觸事件的觸發動作而添加事件的監聽器。

有界上下文

經過幾周發現了區分不同的限定上下文Bounded Conext 重要性,一個有界的上下文是作為保護維護統一內部模型的層出現,這對于大型應用很重要。

Cribbb有一個身份方面的有界上下文,功能有:包括注冊一個新用戶 following其他用戶,更新賬戶信息等。

那么通知功能是否有自己的有界上下文?或者是身份有界上下文的一部分?

通知功能其實應該屬于身份有界上下文:

首先,通知是用戶身份系統的一種重要概念,應用可以觸發一個通知,但是通知僅僅對于注冊有身份的用戶是重要的。

其次,在通知模型和用戶身份識別模型之間沒有矛盾,如果有,那么我們可能就區分為不同的有界上下文。

最后,一個通知沒有道理不和用戶綁定,一個用戶只能查看自己的通知,不能看其他用戶的通知,我們為Cribbb建立一個獲得通知的API,端點是:me/notifications.

通知實體和用戶聚合

通知應該作為實體建模,通常你默認會建立為值對象 而不是實體,因為簡單,但是這次我們沒有選擇。

通知沒有必要知道用戶上下文以外的事情,我們應當能夠從數據庫任意地接受消息,而不是只能從User對象獲得一個用戶的通知。

這意味著通知如果放在User聚合中很整潔合適。Notification通知實體也能非常簡單。

首先,通知需要一個內容體需要保存通知的內容文本數據。

其次,我們需要一個 已讀/未讀的狀態,我們需要通知消息被讀的時間戳,這樣我們能夠判斷這兩個狀態。

最后,我們分類通知以便可以過濾它們,在通知實體中使用一個關鍵詞來標識。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529839.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529839.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529839.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 自帶導出excel_4.java項目頁面導出excel功能

用的是SSM框架,字段根據自己的業務需求改1.前臺頁面導出/*導出按鈕提交*/function downloadExcel(){$("#dynamicDownload").submit();}2.后臺相關代碼import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org…

php 運行外部程序_PHP在linux上執行外部命令的方法

目錄:一、PHP中調用外部命令介紹二、關于安全問題三、關于超時問題四、關于PHP運行linux環境中命令出現的問題一、PHP中調用外部命令介紹在PHP中調用外部命令,可以用,1>調用專門函數、2>反引號、3>popen()函數打開進程,三…

php直播pk規則,直播源碼中的主播PK功能是如何實現的

直播行業為贏得更廣泛用戶的青睞,自然要不斷開發更有趣的玩法、模式,在直播源碼中加入主播PK功能就是一種提高直播互動性、激發用戶好勝心的方法,一方面這種方法可以吸引更多用戶觀看,增加主播的曝光率,另一方面它又能…

php中手機端ajax上拉加載更多,jQuery手機網頁上拉加載更多

手機網頁和PC網頁都可以使用的上拉加載更多內容,其中LoadingDataFn自己改為ajax加載就可以了var page 1, //分頁碼off_on false, //分頁開關(滾動加載方法 1 中用的)timers null; //定時器(滾動加載方法 2 中用的)//加載數據var LoadingDataFn function() {var …

phpcms上傳php,phpcms如何上傳視頻

phpcms如何上傳視頻?phpcms-v9上傳視頻文件時的解決方案1.不建議直接在后臺上傳視頻文件,因為視頻文件一般都比較大,直接上傳影響帶寬;可先通過ftp工具將視頻文件上傳到指定目錄,然后再后臺引入視頻文件的地址即可2.如…

護衛神怎么重啟php,護衛神·主機大師如何開啟php_opcache_護衛神

護衛神主機大師支持5.5至7.3這幾個版本開啟php_opcache擴展。一,先打開護衛神主機大師面板-常用操作-打開軟件目錄二,打開phpweb目錄,找到要開啟opcache的php版本,比如我這里要在php5.5中開啟,進入php55目錄&#xff0…

php 首頁加背景圖片,如何在頁首添加一張背景圖片

Navy主題如何在頁首添加一張圖片可以http://www.ikk.me/這樣子頂部添加背景圖片他的代碼是【點擊查看】回復內容:Navy主題如何在頁首添加一張圖片可以http://www.ikk.me/這樣子頂部添加背景圖片他的代碼是【點擊查看】看了下代碼,就是給 section 加了個 …

php裝箱,php兌現裝箱算法

php實現裝箱算法貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況&…

flash as3與后臺php交互用戶注冊例子,as3與PHP后臺交互2

怎么樣,是不是也很方便的實現了as3和后臺的數據傳輸?恩,現在我們的程序可以雙向交互數據了,但這只是一些簡單的數據,如果你要傳輸帶有結構的數據,(熟悉as2的人都知道loadVars可以自動解析下載數據的結構)&a…

java 去除 quot,JAVA去除web頁面傳入后臺的特殊字符工具類 | 學步園

package www.tmzskj.com.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 功能 過濾特殊字符,清除掉所有特殊字符* regEx 為要清除的字符* author admin**/public class StringFilterTest {public static String …

matlab傅里葉工具箱,matlab通信工具箱.pdf

matlab通信工具箱randerr 產生隨機誤碼圖樣randint 產生均勻分布的隨機整數信號源 randsrc 用預定義的字母表產生隨機矩陣wgn 產生高斯噪聲commsrc.pattern 結構模式生成句柄berawgn 非編碼的AWGN 信道的誤比特率bercoding 編碼的AWGN 信道的誤比特率berconfint 蒙特卡羅仿真下…

java迭代器cas,java提高篇(三十)-Iterator - Java 技術驛站-Java 技術驛站

迭代對于我們搞Java的來說絕對不陌生。我們常常使用JDK提供的迭代接口進行Java集合的迭代。Iterator iterator list.iterator();while(iterator.hasNext()){String string iterator.next();//do something}迭代其實我們可以簡單地理解為遍歷,是一個標準化遍歷各類…

mysqldb mysql config,安裝mysqldb python界面時找不到mysql_config

mySQLdb是一個用于mysql的python界面,但它不是mysql本身。 顯然mySQLdb需要命令“mysql_config”,所以你需要先安裝。你能否確認你是否通過從shell運行“mysql”來安裝mysql本身? 這應該給你一個“mysql:command not found”以外的…

kfcm算法matlab實現,KFCM算法分析

function [center, U, obj_fcn] KFCMClust(data, cluster_n, kernel_b,options)% FCMClust.m 采用模糊C均值對數據集data聚為cluster_n類%% 用法:% 1. [center,U,obj_fcn] KFCMClust(Data,N_cluster,kernel_b,options);% 2. [center,U,obj_fcn] KFCMClus…

matlab中的terminator模塊,2.2 Ground 及 Terminator模塊

課時:117節課時長:20.1小時課級:中級提高simulink是matlab中的一種可視化仿真工具, 是一種基于matlab的框圖設計環境,是實現動態系統建模、仿真和分析的一個軟件包,被廣泛應用于線性系統、非線性系統、數字…

matlab 柯西黎曼方程,【判斷題】柯西-黎曼方程成立是函數解析的必要條件.

參考答案如下判斷【判斷題】核糖體的沉降系數等于大小亞基沉降系數的總和。題柯【其它】We ______________________________________ (投入到各項校園課外活動中) on campus.西黎【單選題】起動機與蓄電池的連接線蓄電池與車架的搭鐵線則采用( )。 (2.0分)曼方【簡答題】作業選…

取整函數php,php取整函數三個例子

本節內容:php取整函數用法1,php取整函數 ceil -- 取最大整數float ceil ( float value )返回不小于 value 的下一個整數,value 如果有小數部分則進一位。ceil() 返回的類型仍然是 float,因為 float 值的范圍通常比 integer 要大。…

python執行過程打印,如何在pytest運行過程中看到正常的打印輸出?

喬在接受的答案中提出了一個評論 ,他問道:有沒有辦法打印到控制臺并捕獲輸出,以便它顯示在junit報告中?在UNIX中,這通常被稱為開球 。 理想情況下,開球而不是捕捉將是py.test默認。 非理想情況下&#xff0…

cfar恒虛警matlab實現,一種用于距離副瓣抑制的自適應恒虛警方法與流程

本發明涉及脈沖壓縮雷達數字信號處理技術領域。背景技術:在傳統的真空管體制雷達中,由于發射占空比受限,通過設計較低的雷達重復發射頻率實現遠距離的目標探測,但由于發射的是簡單的脈沖調制波形,重復頻率降低和脈寬加…

修改oracle數據連接數據庫,如何修改oracle數據庫的連接數

如何修改oracle數據庫的連接數查詢數據庫當前進程的連接數:select count(*) from v$process;查看數據庫當前會話的連接數:elect count(*) from v$session;查看數據庫的并發連接數:select count(*) from v$session where statusACTIVE;查看當前…