2010-11-27 31 views
2

我在這裏問了另一個問題,所以有一個用戶非常困惑,我建議做以下幾點:我已經讀過1000次,因此實體不應該通過服務向服務器發出保存/添加/刪除調用數據庫。這就是ViewModel的任務!我是否從MVVM設計模式中的ViewModel或Model調用我的服務?

你說什麼?

public class School 
{ 
    private ISchoolRepository _repository; 

    public string Name { get; set; } 

    public School() 
    { 
     this._repository = IoC.Resolve<ISchoolRepository>(); 
    } 

    public bool IsValid() 
    { 
    // Some kind of business logic? 
    if (this.Name != null) 
    { 
     return true; 
    } 

     return false; 
    } 

    public void Save() 
    { 
     if (this.isValid()) 
     { 
     this._repository.Save(this) 
     } 
} 

回答

1

我不會與實體混合庫要麼是因爲我喜歡這些實體沒有任何背景或環境狀態。我認爲管理實體的存儲是存儲庫的唯一責任。

如果您在實體之間存在依賴關係會發生什麼?例如,一所學校有學生。直到你挽救學校,你才能拯救學生。你將不得不將這個邏輯建立到你的學生實體中。你的學生也會救這所學校嗎?他們會拒絕保存嗎?他們是否需要檢查學校的數據庫?他們至少需要知道關於學校的一些事情,然後在學校和學生之間創建一個相當硬的線路。

然後你添加教師,你需要爲他們添加類似的邏輯。代表這些關係和依賴關係的代碼隨後遍佈在許多實體中。也想想交易。然後添加多個層。你看到這可能會變得多麼複雜嗎?很快你會有肉丸和奶酪意大利麪!

知識庫是知識庫的責任。

HTH

乾杯

0

從您的實體調用服務違反了單一責任原則。如果將來您需要讓您的實體從不同於服務的支持存儲中獲得水分,您將不得不更改所有實體。即使您正在注入存儲庫,它仍然違反了SRP。

0

我不明白什麼是錯的這種做法,如果我想從換出說SQL服務器到Oracle我只想註冊一個所謂的新庫「OracleSchoolRepository並確保它滿足ISchoolRepository接口。

我不覺得這有什麼問題嗎?你可以突出一個場景時,上面會成爲一個問題?

謝謝!

+0

問SRM不是我笑;-) – Elisabeth 2010-11-27 18:19:56

+0

林問你,你似乎可以用另一種方法是?爲什麼?你解決什麼問題? – BenjaminPaul 2010-11-27 19:14:36

相關問題