技術討論總結 客戶化 快取

2021-09-23 21:43:53 字數 1899 閱讀 6463

最近,gix4專案需要開展客戶化工作。同時,下一期sprint中,客戶還要求大幅度提公升產品的效能。針對所存在的問題,開發人員決定開一系列的技術討論會。

我總結了目前遇到的和可能遇到的問題:

客戶化

實體類客戶化

各客戶對同一產品表現出的需求,要求實體類在一定程式上各不相同。這就需要領域模型做到可以客戶化。

介面客戶化

需求不同,介面自然也需要客戶化。這是一般性需求。

效能

實體類優化

目前系統使用的是基於csla物件模型的實體類。由於使用了csla託管屬性,效能比較差。同時,由於乙個聚合類往往通過多個多層的實體類聚合而成,除錯時卻都是在除錯csla的基類,基類中為所有實體類使用同一種模式進行架構,而用遞迴和繼承來實體類間結構,使得**難於除錯,經常讓人暈頭轉向。

快取的植入

要提公升現在分布式系統的效能,最直接最易用的方法就是對一些常用而不常變的物件進行快取,減少網路傳輸,減少資料庫訪問次數。

我想,產品gix4架構思想可以這麼解釋:特定於建築領域的產品線架構方法。

產品不同於專案,它是為整個建築行業開發的,需要考慮其通用性,同時也必須能夠滿足各企業的定製化需求。整個產品線開發中,包含了三類客戶,按照721的原則劃分,這三類客戶是:

一類使用者:70%;這些客戶的功能需求完全符合整個行業的習慣,他們代表了行業的一般性情況。這些需求肯定要被包含在產品中。

二類使用者:20%;這些客戶一般分為幾種類別;同一類客戶的需求往往相同,同不類客戶的需求往往不同;這些需求一樣要被包含在產品中,產品需要一定的策略來給各類使用者進行定製。

個性使用者:10%;這些客戶的功能需求往往源自其自身的習慣,往往不能被其它同行所採用。這類需求將不會被包含在產品中,但是作為乙個有平台性質的產品,應該具備為這些使用者定製功能的擴充套件能力。

軟體架構採用領域驅動,所以主幹**中的領域模型需要代表行業的整體需求。同時,也要能表達二類使用者的情況,這可能需要多個小分支模型。個性使用者的需求需要在主幹模型的基礎上擴充套件。(在類設計上主要使用繼承,而建模環境將會在不遠的將來支援,同樣也需要支援模型擴充套件。)

二、設計時,應該盡量避免二義性。

關於設計的討論,是在討論乙個具體的問題引起的小插曲,問題如下:

在原來的產品設計中,有這樣的聚合關係:project->contract->budget;但是現在需要同時支援:project->budget。而這兩個需求本身就是從兩家不相干的客戶提出,它們不能同時存在。

我一開始主張budgetparent->budget的聚合,然後project和contract都繼承自budgetparent。提出這個方案的原因在於,我從客戶的需求開始倒推領域需求,我覺得在客戶的淺意識裡,budget之上是有某乙個東西有進行組織(budgetparent)。但是後來知道,這個推論是片面的,行業內並沒有這樣的認知。所以從領域角度講,這個設計並不成立。

對於我提出的方案,周哥提出盡量不要帶有二義性的設計。如果只可能是project和contract,在沒有必要的情況下,不需要再引入乙個「budgetparent」類或介面。這樣不但會增加程式的複雜度,更重要的是它會讓程式變得含糊,看程式的人並不能從類的設計上一眼看出領域需求。後來一想,確實如此,沒有必要的話,還是使用具體類再加有實在意義;不要因為程式的考慮,而使得領域複雜化。

後來的結論是:需要再次和領域專家確認後,才能知道到底乙個budget會不會可能同時被project和contract進行組織。如果是,則budget類本身應該擁有project和contract的引用。如果不是,則可能需要設計兩個不同的budget子類來實現。確實,不管最後是選用哪一種,都能清晰地表達出budget、project、contract之間的關係。:)

php快取技術總結

全頁面靜態化快取也就是將頁面全部生成html靜態頁面,使用者訪問時直接訪問的靜態頁面,而不會去走php伺服器解析的流程。此種方式,在cms系統中比較常見,比如dedecms 一種比較常用的實現方式是用輸出快取 ob 1 全頁面靜態化快取 也就是將頁面全部生成html靜態頁面,使用者訪問時直接訪問的靜...

池化技術總結

導言 池化是乙個幾乎所有做深度學習的人都了解的乙個技術,大家對池化如何進行前向傳播也都了解,池化的作用也了解一二。然而,池化如何回傳梯度呢,池化回傳梯度的原則是什麼呢,最大池化與平均池化的區別是什麼呢,什麼時候選擇最大池化 什麼時候選擇平均池化呢。主要用的池化操作有平均池化 最大池化 全域性平均池化...

PHP中9大快取技術總結

1 全頁面靜態化快取 也就是將頁面全部生成html靜態頁面,使用者訪問時直接訪問的靜態頁面,而不會去走php伺服器解析的流程。此種方式,在cms系統中比較常見,比如dedecms 一種比較常用的實現方式是用輸出快取 ob start 要執行的 content ob get contents 將快取內...