這不是我的意圖,就是在代碼所屬的DDD中進行關於驗證的辯論,而是專注於一種可能的方法以及如何解決本地化問題。我有我的域對象(實體)的其中之一體現在以下情形下,行爲(方法):本地化來自域對象(實體)的驗證消息
public void ClockIn()
{
if (WasTerminated)
{
throw new InvalidOperationException("Cannot clock-in a terminated employee.");
}
ClockedInAt = DateTime.Now;
:
}
正如你可以看到,當ClockIn方法被調用,該方法檢查對象的狀態確保員工沒有被終止。如果員工被終止,我們會拋出與「不要讓您的實體進入無效狀態」方法一致的異常。
我的問題是我需要本地化異常消息。這通常是使用應用服務(ILocalizationService)完成的(在此應用程序中),該服務是使用MEF在需要訪問其方法的類中導入的。但是,與任何DI框架一樣,只有在容器實例化對象時纔會注入/導入依賴項。 DDD通常不是這種情況。
此外,我所瞭解的有關DDD的一切都表明,我們的域對象不應該有依賴關係,這些關注點應該從域對象的外部處理。如果是這樣的話,我如何才能對本地化的消息進行本地化?
由於許多商業應用程序都需要全球化/本地化,因此這不是一項新穎的要求。我會很感激一些建議如何使這項工作,並仍然符合DDD的目標。
UPDATE
我沒有原先指出,我們的定位是推動所有的數據庫,所以我們有一個本地化服務(通過注射ILocalizationService接口)。因此,使用Visual Studio提供的靜態資源類作爲項目的一部分不是一個可行的選項。
另一個更新
也許會一起移動的討論指出應用程序是一個RESTful服務的應用程序。因此,客戶可能是一個簡單的網絡瀏覽器。因此,我無法編寫任何期望調用者可以執行任何類型的本地化,代碼映射等的代碼。當發生異常時(並且在這種方法中,試圖將域對象置於無效狀態是一個例外),異常被拋出,並且適當的HTTP狀態代碼與異常消息一起被返回,異常消息應該被本地化爲調用者的文化(Accept-Language)。
相關:http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-objec。 – Steven 2012-04-11 06:46:19
相關,是的,但遠不及答案。感謝您的鏈接! – SonOfPirate 2012-04-11 12:11:13
您由Framework \ Platform爲.NET應用程序提供的用戶機制拋出新的異常(資源[「TerminatedEmployeeMessage」])。 http://stackoverflow.com/questions/1138934/c-sharp-class-library-localization – 2012-04-13 05:20:30