架構中的分離
我的一個專案中,引入了一個類似DDD的分析,然後跟兄弟們就搭手建立,實現程式碼!
但是,在我們建立的過程中,以及不斷的分析中,我們發現全部按照ddd來實現有很多比較牽強,或者說是有點複雜化了,在此表述出來跟同行的xdjm們探討探討。
我們從最開始就用ddd的模式進行業務分析,找出其中的業務物件:實體、值物件、工廠、倉庫、以及類似聚合根的facade物件,用來實現一個簡單的表單自定義功能。這個功能裡面主要是新增表單物件(形象點就是標籤),然後調整這個標籤的擺放位置(layout),以及這個標籤的各種屬性。這個過程中產生的業務就是增刪改查,沒有多少特別的,唉。。。。
但是我們當初在分析的時候,也是按照ddd的架構(或者說是包結構)方式來實現,增加了很多過程物件(這些物件包括ddd裡面的那種分層和物件組,xdjm們可以看看那個ddd sample例子,我忘了地址了,不過在這個論壇裡面有)。
等到我們真正分析業務流程的時候,我發現對上面的實現還是有些用處的,因為我們透過上面的增刪改查處理過程,可以產生我們業務過程中需要的物件,在這裡使用ddd就顯得合理了很多。
所以,我就考慮,一個專案中的分析應該劃分出兩個部分進行實現:一是針對物件的維護(可能就是增刪改查,不必實現ddd的那一整套);一是按照領域的業務處理,在這裡面我們可以實現不同物件的管理。這裡所講的物件管理不是簡單的增刪改查,而是物件的初始化,資料載入等等,體現在ddd裡面可能就是factory,repository等等,還有就是entity,vo,在一個業務過程裡面,我們可以清楚感覺到一個物件的到底是不是有生命週期,到底是不是一個有特徵的特殊物件,從而確定了實體,而我們在處理這些實體的時候就會自然而然的分離出其中的一些聚合根,如果實在找不到,我們可以用facade模式來替代,以避免產生業務洩露的缺口。
而如果我們把上面的兩個方面混在一起來處理的話,我們就是在第一種情況裡面產生一些迷茫,到底實體在哪裡?值物件在哪裡?都是增刪改查,談什麼實體和值物件啊?如果是那樣的話,我們就不是很清楚的分離業務處理和資料維護。。。
針對這些情況,我覺得分離增刪改查相當有必要,必要到我想把增刪改查用restful來實現,也就是我們的那些跟增刪改查相關的頁面都有統一的呼叫和實現機制,區別就是提交的表單,對應的資料庫表,所有這些東西我們其實不必做太多工作,但是可能會有很多特例,那樣就會增加相應的複雜性了。。。。
業務領域分析就是物件的協作,物件的整合。。。。這點就要具體情況具體分析了。。。。。
小弟在此拋磚引玉了。。。。
但是,在我們建立的過程中,以及不斷的分析中,我們發現全部按照ddd來實現有很多比較牽強,或者說是有點複雜化了,在此表述出來跟同行的xdjm們探討探討。
我們從最開始就用ddd的模式進行業務分析,找出其中的業務物件:實體、值物件、工廠、倉庫、以及類似聚合根的facade物件,用來實現一個簡單的表單自定義功能。這個功能裡面主要是新增表單物件(形象點就是標籤),然後調整這個標籤的擺放位置(layout),以及這個標籤的各種屬性。這個過程中產生的業務就是增刪改查,沒有多少特別的,唉。。。。
但是我們當初在分析的時候,也是按照ddd的架構(或者說是包結構)方式來實現,增加了很多過程物件(這些物件包括ddd裡面的那種分層和物件組,xdjm們可以看看那個ddd sample例子,我忘了地址了,不過在這個論壇裡面有)。
等到我們真正分析業務流程的時候,我發現對上面的實現還是有些用處的,因為我們透過上面的增刪改查處理過程,可以產生我們業務過程中需要的物件,在這裡使用ddd就顯得合理了很多。
所以,我就考慮,一個專案中的分析應該劃分出兩個部分進行實現:一是針對物件的維護(可能就是增刪改查,不必實現ddd的那一整套);一是按照領域的業務處理,在這裡面我們可以實現不同物件的管理。這裡所講的物件管理不是簡單的增刪改查,而是物件的初始化,資料載入等等,體現在ddd裡面可能就是factory,repository等等,還有就是entity,vo,在一個業務過程裡面,我們可以清楚感覺到一個物件的到底是不是有生命週期,到底是不是一個有特徵的特殊物件,從而確定了實體,而我們在處理這些實體的時候就會自然而然的分離出其中的一些聚合根,如果實在找不到,我們可以用facade模式來替代,以避免產生業務洩露的缺口。
而如果我們把上面的兩個方面混在一起來處理的話,我們就是在第一種情況裡面產生一些迷茫,到底實體在哪裡?值物件在哪裡?都是增刪改查,談什麼實體和值物件啊?如果是那樣的話,我們就不是很清楚的分離業務處理和資料維護。。。
針對這些情況,我覺得分離增刪改查相當有必要,必要到我想把增刪改查用restful來實現,也就是我們的那些跟增刪改查相關的頁面都有統一的呼叫和實現機制,區別就是提交的表單,對應的資料庫表,所有這些東西我們其實不必做太多工作,但是可能會有很多特例,那樣就會增加相應的複雜性了。。。。
業務領域分析就是物件的協作,物件的整合。。。。這點就要具體情況具體分析了。。。。。
小弟在此拋磚引玉了。。。。
相關文章
- 前後端分離架構中的介面設計後端架構
- 前後分離架構的探索之路架構
- ClickHouse 存算分離架構探索架構
- 解構成為架構潮流的“存算分離”架構
- Mysql之讀寫分離架構-AtlasMySql架構
- 什麼是存算分離架構?架構
- 網際網路動靜分離架構架構
- 前端與後端分離的架構例項(二)前端後端架構
- 前端與後端分離的架構例項(三)前端後端架構
- 前端與後端分離的架構例項(一)前端後端架構
- 《從零構建前後分離web專案》探究 - 深入聊聊前後分離架構Web架構
- 一次前後端分離架構的實踐後端架構
- 蘇寧易購:前後端分離架構的落地思考後端架構
- 一個前端與後端分離的架構例項前端後端架構
- 淺談架構之路:前後端分離模式架構後端模式
- 看懂架構設計中的服務隔離架構
- SQL Server 2008的使用者架構分離SQLServer架構
- ElasticSearch實戰系列十: ElasticSearch冷熱分離架構Elasticsearch架構
- 系統架構:Web應用架構的新趨勢---前端和後端分離的一點想法Web應用架構前端後端
- CQRS命令查詢分離架構的多種形式實現 - Kapil架構API
- 一場由React引發的前後端分離架構的思考React後端架構
- 網際網路分層架構,為啥要前後端分離?架構後端
- vivo 商城前端架構升級—前後端分離篇前端架構後端
- 分散式之閒侃前後端分離架構的必要性分散式後端架構
- 程式碼的分離與解耦,向移動架構師進階!解耦架構
- 容器化RDS|計算儲存分離架構下的 IO 優化架構優化
- Web系統開發構架再思考-前後端的完全分離Web後端
- Laravel5.6 + 阿里雲 OSS 完成圖文分離架構Laravel阿里架構
- MySQL 高可用架構:主從備份及讀寫分離MySql架構
- 如何在SSR架構中實現離線可用?(一)架構
- 容器化RDS—計算儲存分離架構下的“Split-Brain”架構AI
- 架構離不開資料結構架構資料結構
- 應用架構之道:分離業務邏輯和技術細節應用架構
- MySQL主從複製架構搭建及讀寫分離測試MySql架構
- 將業務邏輯和雲架構分離的多執行時Muilti-Runtime的微服務架構 〜Bilgin Ibryam架構UI微服務
- 架構中的“大象”架構
- 軟體架構之前後端分離與前端模組化發展史架構後端前端
- Shopee ClickHouse 冷熱資料分離儲存架構與實踐架構