我是一個團隊的一員,負責將舊版VB6 UI/COBOL數據庫應用程序改造爲現代。在我被聘用之前,我決定做出決定(主要是銷售,我敢肯定)要在數據庫之前重做用戶界面。所以,現在我們使用WPF和MVVM產生了很好的效果,到目前爲止令人驚歎,特別是使用CSLA作爲我們的Model層。C#CSLA業務對象困境:只讀與讀/寫
但是,由於我們的開發與舊產品的下一個版本並行,所以我們受到了一些限制。我們不能對COBOL數據庫的調用進行任何更改(或最小的更改)。到目前爲止,這一切都很好,儘管如此,如果你能相信的話,回到SQL Server的輝煌時代。
在我遇到了一個特別討厭的障礙,就是我們的BO設計是在處理列表中返回的「輕」商業對象和他們的「完整」對象。讓我試着構建一個例子:
比方說,我們有一個人對象在數據庫中的一堆字段。當我們在該表上進行搜索時,我們不會返回所有的字段,因此我們使用這些字段填充我們的精簡對象。這些字段可能是也可能不是整個人的子集。我們可能已經加入了兩個或兩個以檢索特定於搜索的其他信息。但是,如果我們想編輯我們的person對象,我們必須再次調用完整版來填充UI。這給我們留下了兩個對象,並嘗試在1個虛擬機中處理它們的狀態,同時試圖在刪除,編輯和添加後保持其所在的任何父對象同步人員列表。最初,我將我們的Lite人物體從ReadOnlyBase <>中派生出來。但現在我正在處理與完整BO列表相同的列表行爲,除了半滿,半精簡,我認爲我應該只是將輕量級和完整版從BusinessBase <中派生出來>並簡單地將lite版本的setter屬性設爲私有。
有沒有其他人遇到過,並找到了解決方案?在睡覺之後,我想出了這個潛在的解決方案。
public class PersonFull : BusinessBase<PersonFull>
{
...
}
public class PersonLite : BusinessBase<PersonLite>
{
...
}
public class Person : BusinessBase<Person>
{
public PersonFull PersonFull;
public PersonLite PersonLite;
}
public class PersonList : BusinessListBase<PersonList, Person>
{
}
顯然,一切都將是里昂證券登記性質等,但爲簡便起見,他們場還有:如果我們在另一個BO包裝完整版和精簡版版本,我們的BO的,像這樣的東西。在這種情況下,Person和PersonList將包含所有工廠方法。在搜索操作之後,PersonList將由其PersonLite成員全部填充且PersonFull對象全部爲空的Person對象填充。如果我們需要獲取完整版本,我們只需告訴Person對象,現在我們有我們的PersonFull對象,因此我們可以填充編輯用戶界面。如果Person對象被刪除,我們可以很容易地通過CSLA刪除程序來做到這一點,同時仍然保持我們所有正在收聽它的VM的列表的完整性。
所以,我希望這對每個人都有意義,如果有人有不同的解決方案,他們已經成功地僱用或批評這一個,無論如何!
謝謝!
(轉貼自:http://forums.lhotka.net/forums/thread/35576.aspx)
我不完全確定你的建議是否應該解決。 Lite BO永遠不會填充完整的BO,因爲我們可以直接訪問數據庫,從lite版本的獨特數據中提取完整的BO。我想我可以看到一個完整版本在編輯後更新lite版本,但這不是真正的解決方法。 – opedog 2009-08-14 16:45:56
lite版本將無法完整填充完整版本,但它可能足以顯示給用戶,並且可以延遲加載其餘數據。我在過去取得了一些成功。如果你試圖修改內存對象,那麼你的方法將會完全不同。 – Joseph 2009-08-14 16:54:07
如果意圖是重新構建後端BO,現在前端已經完成,那麼爲什麼不將它用作測試用例,以便從包含所有屬性的新CSLA對象開始? – 2009-08-14 17:41:16