2009-10-11 28 views
0

我想寫一個類來存儲一些有用的方法,這些方法與我的Model,我的Model和我的Repository的序列有關。我不認爲任何人都有責任計算任何事情。它本身也不是真正的服務。數據計算方法的好去處在哪裏?應該叫什麼?

我想要做這樣的事情:

IEnumerable<Game> someGames; 
... 
int score = _something.CalculateScore(someGames); 

什麼叫這一層? Helper能成爲一個好名字嗎?

另外,可以將模型做這樣一些基本的計算:

class Ticket 
{ 
    IList<Log> Log { get; } 
    Tech LastUpdatedBy { get { return Log.Last().By; } 
} 

或者是超出範圍的模型數據類?

回答

1

層分離是合乎邏輯的事情,應該用一定程度的彈性來處理。嚴格的方法是從模型層中刪除任何和所有的邏輯,並讓它存儲對象並檢索它們,沒有別的。根據這種方法,所有邏輯都應該駐留在業務邏輯層中。

這個硬幣的另一面是放鬆的方法,它並不關心邏輯片斷是否散佈在模型層,其他模型層和客戶端代碼。這比較靈活,但應該謹慎使用。

就我個人而言,我會留下模型圖層中的小片段。數據計算方法通常是業務邏輯層的核心,在某些情況下,它們是靜態放置在自己的類中,以便廣泛重用。這取決於你的需求。

1

我會將這些方法留在模型中。我的經驗法則是,如果它足夠通用以至於任何實現都可以利用它,那麼離開模型是可以的,否則它就屬於其他地方。

2

您對「模型」一詞的使用向我建議您使用的是MVC體系結構。 MVC體系結構中的一個常見理念是Controllers should be as "skinny" as possible

使用這種方法,您的CalculateScore()方法應該是您的模型的一部分。您的控制器應只包含選擇視圖和與來自用戶瀏覽器的請求進行交互的必要邏輯。

我想到的方式是,如果我將我的MVC Web應用程序轉換爲控制檯應用程序,我會保留該模型但丟棄控制器和視圖。