一、什麼是限界上下文
限界上下文即是在軟件開發過程中劃分出的一個邊界,用以確定各種角色的職責和權限範圍等。它定義了系統中各個子系統、模塊或對象之間的關係及其可訪問的數據量和範圍,減少了模塊之間的交互,使代碼更加可維護和可重用。
限界上下文常見的應用場景是DDD(領域驅動設計)中,在實現DDD中的聚合和實體時,我們需要為每個聚合和實體定義明確的限界上下文。
下面是一個使用DDD實現的購物車系統代碼示例:
class ShoppingCart { constructor() { this.cartItems = []; } addItem(item, user) { if(user.isVip) {//限制只有VIP才能購買該商品 if(item.stock > 0) {//限制庫存不足 let existItem = findItemInCart(item.id); if(existItem) { existItem.amount ++; } else { this.cartItems.push({ id: item.id, name: item.name, amount: 1, price: item.price }) } } } } findItemInCart(id) { return this.cartItems.find(item => item.id === id); } getCartTotalPrice() { return this.cartItems.reduce((total, item) => { return total + item.price * item.amount; }, 0) } } class User { constructor(name, isVip) { this.name = name; this.isVip = isVip; } } class Item { constructor(id, name, price, stock) { this.id = id; this.name = name; this.price = price; this.stock = stock; } } const cart = new ShoppingCart(); const user = new User('張三', true); const item = new Item('001', '電視機', 2399, 20); cart.addItem(item, user);
二、限界上下文的作用
限界上下文的作用在於劃分系統中各個子系統、模塊或對象之間的關係及其可訪問的數據量和範圍,從而減少了模塊之間的交互,使代碼更加可維護和可重用。
具體的,它能夠:
1、定義某個對象的作用範圍,以及在該範圍內對數據修改和讀取的限制,減少代碼中錯誤的發生,提升代碼的健壯性。
2、對於某些對象的訪問需要授權的情況,限定訪問特定的限界上下文,從而提供了更加嚴格和精確的安全控制手段。
3、能夠清晰地描述業務問題,並支持業務和技術分離,減少代碼之間的依賴關係。
三、限界上下文的實現
在實現限界上下文時,我們需要考慮以下幾點:
1、確定限界上下文的範圍,必須清楚地知道每個對象所屬性的上下文,避免對象的依賴混亂。
2、實現限界上下文必須符合領域驅動設計(DDD)的原則,即圍繞業務領域建模,而不是圍繞技術框架建模。
3、限界上下文的劃分必須有明確的目的,且必須與具體業務需求相符。
下面展示一個使用限界上下文來實現的數據訪問對象:
class UserDAO { constructor(client, ctx) { this.client = client; this.tableName = ctx + '_users'; } getById(id) { return this.client.query(`SELECT * FROM ${this.tableName} WHERE id=${id}`); } create(user) { return this.client.query(`INSERT INTO ${this.tableName} VALUES ${user}`); } } const mysqlClient = new MysqlClient(); const userDao = new UserDAO(mysqlClient, 'blog'); //限制只能操作blog上下文的User對象 userDao.create({id:1, name:'張三', age: 18}); //MysqlClient寫法可以參考Mysql官方文檔
四、限界上下文的注意事項
在實際的開發中,我們需要注意以下幾個方面:
1、限界上下文的劃分應該盡量避免出現交叉依賴關係,否則將會導致限界上下文間的耦合性較高,使得系統的可維護性和可擴展性下降。
2、限界上下文的名稱應該清晰、簡潔,並且避免出現歧義,以避免在設計中出現與需求不符的問題。
3、在定義限界上下文時,必須避免過度約束對象的行為,防止出現對象行為不足或者行為過度的情況。
綜上,限界上下文可以為我們構建性能高、可維護性強的應用程序提供指南,並提供了設計領域對象的一種規範化的方法。在使用的過程中,我們需要結合 DDD 的原則,將限界上下文分配給正確的領域對象。只有合理地使用限界上下文,才能構建更加健壯和高效的系統。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/198210.html