2013-02-12 44 views
0

使用我的DDD模型,我擁有託管特定用戶故事並允許存儲庫/實體/域服務被組織的應用程序服務 - 據我所知這是一種常見的的領域驅動設計分層如下部分:應該在定時器上調用DDD應用程序服務調用的入口點

DDD layers

我需要調用一個定時調度應用服務,這個時間表是在從職位庫中獲得模型本身定義。對這篇文章的評論友好地提到要使存儲庫返回GetPendingJobs()以及要運行的作業列表。

每個作業都使用一個cron作業字符串,並將調用一個應用程序服務(例如SyncAccounts)。

我的問題是:

  1. 我知道我們可以在一個線程查詢此,但如果將這一坐,在實體領域的服務,或一些外部的域模型(也許之間的層應用程序和演示文稿)?

  2. 正如評論中提到的就業信息庫返回GetPendingJobs(),如果這是基於當前的日期/時間,知識產權的責任是知道何時運行或Job實體(檢查針對它的cronjob字符串的當前日期時間)?下面

代碼:

namespace DomainServices 
{ 
    public class JobSchedule 
    { 
     private readonly JobsRepository repo; 

     JobSchedule(JobsRepository repo) 
     { 
      this.repo = repo; 
     } 

     public void Poll() 
     { 
      var jobs = this.repo.GetAllJobs(); 

      foreach(var job in jobs) 
      { 
       if(job.IsTimeToRun()) 
        job.Run();  
      } 
     } 
    } 
} 
+0

我會'GetAllPendingJobs'這將只是返回應該運行的人。但我不明白DDD有什麼作用呢? – jgauffin 2013-02-12 12:15:52

+0

感謝您的回覆 - 我認爲它與Domain Drive設計有很大關係......特別是我們如何將應用程序層與模型進行交互。 另外,您是否想知道倉庫何時應該運行(基於日期/時間)?如果這不是工作的責任,要知道它何時會運行? – g18c 2013-02-12 14:22:46

回答

1
  1. 這種邏輯運算關心,因此屬於在應用程序層。然而,這可以根據工作性質以各種方式實施。這些工作是否需要在自己的過程中運行?如果是這樣,那麼你可能想要與一個Windows服務託管。如果作業可以作爲主應用程序進程的一部分運行,則運行程序本身可以是後臺應用程序服務。

  2. GetPendingJobs方法可以基於當前或提供的時間返回作業,在這種情況下,它有效地知道哪些作業必須在什麼時候運行。但是,規範信息與作業本身相關 - 存儲庫只是查詢它。

+0

請原諒我的小話,但「在應用層」不是層。 Tier是某種部署單元,Udi [寫道](http://gojko.net/2010/06/11/udi-dahan-the-biggest-mistakes-teams-make-when-applying-ddd/)關於這個。 – 2013-02-18 13:12:53

相關問題