為什么模型應該更具抽象概念,而不是被業務屬性束縛

3 評論 1494 瀏覽 8 收藏 8 分鐘

在產品開發中,我們常常會忽略一個重要的原則:“模型應該更具抽象概念,不應該賦予業務屬性?!焙唵蔚囊痪湓挘档梦覀兩钏?。本文作者分享了他對這句話的理解和思考,大家可以參考。

昨天在項目群里討論問題時,有個同事提到一個觀點讓我印象深刻:“模型應該更具抽象概念,不應該賦予業務屬性。”簡單的一句話,卻揭示了一個我們在開發中經常忽略的重要原則。

今天就來聊聊這句話背后的深意,以及它為什么值得我們在模型設計中深刻反思。

01 什么是模型的“抽象概念”?

在軟件開發中,模型是現實世界在系統中的抽象表達。比如,“用戶”這個模型在最抽象的層面上,可以定義為:

  • 用戶名
  • 密碼
  • 郵箱
  • 唯一標識(ID)

這些屬性是用戶的本質,而與具體的業務無關。與之相對的是業務屬性,比如:

  • 用戶下了多少訂單。
  • 用戶的會員等級。
  • 用戶是否參與了某次活動。

這些是與業務相關的邏輯,不屬于用戶的本質。模型的抽象性,就是專注于本質屬性,而不是具體業務場景中那些容易變動的部分。

02 為什么模型設計要“去業務化”?

在項目開發中,把模型設計得過于貼合具體的業務場景,很容易埋下隱患。以下是幾個關鍵原因:

1. 降低系統耦合,保持靈活性

業務邏輯是動態的、經常變化的。如果模型被綁定到具體業務屬性上,那么每次業務調整時,模型都可能需要修改,導致系統的其他部分被連帶影響。

舉個例子:

如果“用戶模型”包含“訂單數量”字段,那么訂單系統的改動會直接影響用戶模型,甚至需要改動數據庫結構。

這樣的耦合讓系統變得非常脆弱。而抽象模型通過專注本質,減少了這種相互牽絆的風險。

2. 提高模型復用性

一個好的抽象模型,可以在不同的業務場景中被復用。比如,一個抽象的“用戶”模型,可以應用于:

  • 電商系統:用于下單和訂單管理。
  • 社交平臺:用于關系網絡和用戶動態。
  • 企業內部系統:用于人力資源管理。

如果模型里包含了業務屬性,比如“購物車內容”或“朋友圈動態”,那么它就很難跨越場景復用,導致代碼和邏輯的重復。

3. 支持業務演進

在一個快速變化的業務環境中,需求的變化往往比我們預期得更頻繁。如果模型綁定了過多的業務屬性,每次需求調整都會牽一發而動全身。

相比之下,抽象模型更像是一塊穩定的基石,業務邏輯可以圍繞它自由演變,而不會對核心結構造成過多干擾。

03 如何在實踐中實現抽象模型設計?

知道了抽象模型的優勢,那該如何在實際開發中實現呢?以下是一些可操作的設計方法:

1. 專注對象的本質

設計模型時,盡量只保留那些反映對象本質的屬性。例如:

用戶模型只包含“用戶名”、“郵箱”等基本信息,而不是“是否參與某活動”這樣的業務字段。

這樣的設計可以保證模型的穩定性,避免被業務需求牽著走。

2. 業務邏輯外移

將復雜的業務邏輯從模型中移到服務層或領域對象中。比如:

“用戶的訂單統計”應該由訂單服務來負責,而不是直接嵌入用戶模型。

通過分層設計,我們可以將模型和業務邏輯解耦,確保模型的純凈。

3. 使用組合代替繼承

當需要擴展模型功能時,優先使用組合,而不是直接在模型中添加字段。例如:

用一個單獨的“會員信息”模塊,來擴展用戶的會員功能,而不是直接在用戶模型中添加“會員等級”。

4. 借助接口與領域驅動設計

通過定義接口或領域對象,避免模型設計受限于具體實現。例如:

class User:

def __init__(self, user_id, username):

self.user_id = user_id

self.username = username

class MembershipDetails:

def __init__(self, level, expiry_date):

self.level = level

self.expiry_date = expiry_date

這樣可以靈活地擴展用戶模型的功能,而不會破壞其核心結構。

04 典型誤區與應對策略

盡管“模型抽象化”的理念很好,但在實踐中我們可能會遇到以下問題:

1. 過度抽象

如果抽象過度,模型可能變得過于籠統,反而無法滿足實際需求。例如,將所有業務都抽象為“實體”或“資源”,最后反而失去了模型的意義。

應對策略: 抽象時,關注對象的本質屬性,適度平衡抽象與現實需求。

2. 忽略業務的特殊性

有時,開發者為了保持模型的抽象性,完全忽略了業務需求的復雜性,導致實現過程反而更加繁瑣。

應對策略: 結合領域驅動設計(DDD),通過分層架構,讓模型抽象與業務邏輯合理分工。

05 抽象模型是穩定的,業務邏輯是可變的

正如那位同事說的,模型設計應該專注于抽象概念,而不是被業務屬性束縛。這是一個技術原則,也是一種長遠的系統設計哲學。抽象模型就像穩定的地基,支持著不斷變化的業務需求。

在未來的開發中,不妨多花一些時間,思考你的模型是否過于依賴業務屬性?是否可以更抽象、更獨立?相信這些思考會讓你的系統更穩健,更靈活。

模型是穩定的,業務是靈活的。把握這兩者的界限,是一個開發者真正成熟的標志。

本文由 @好帥的舅舅 原創發布于人人都是產品經理,未經授權,禁止轉載

題圖來自Unsplash,基于CC0協議

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 如果是這種通用類型的模型,是不是也說明很容易被AI替代?

    來自廣東 回復
  2. 所以一個好的技術是多么的重要,產品梳理清業務邏輯,技術根據業務邏輯設計出清晰的數據庫結構;

    來自北京 回復
  3. 抽象化的模型減少了系統各部分之間的依賴,使得系統更加靈活,能夠適應業務的變化。

    來自廣東 回復