2015-11-04 52 views
2

我正試圖設計視頻租賃軟件。我想Movie類有Actor *誰在電影中扮演的名單。我還希望Actor列出其中他已執行的Movie *的列表。如何實現類之間的雙向聯繫?

  1. 如何確保兩個列表之間沒有不一致?

  2. 如何初始化Movie對象,其中Actor對象不存在[但必須創建]?

+0

至於2,你必須首先添加Actors,然後才能使用這些actor來添加電影。無論如何,在一個典型的數據庫設計中,你會有*三個*列:Actor,Movies和ActorMovieRelation,連接前兩者。我想從[規範化的角度](https://en.wikipedia.org/wiki/Database_normalization)這將是一個比你提出的更好的設計,但我不是一個RDB專家。 –

回答

1

您可以通過控制用戶如何管理關係和保護不變量來確保二者之間的一致性。例如,要確保一個Actor「的Movies的收藏品和Movie的的Actors集合只能通過方法來操縱你控制:

class Actor 
{ 
    private readonly IList<Movie> movies = new List<Movies>(); 

    public IEnumerable Movies 
    { 
     get 
     { 
     return this.movies; 
     // This could be return this.Movies.AsReadOnly() if 
     // you're concerned someone might still try and cast 
     // from IEnumerable 
     } 
    } 
} 

此外,確保所屬的類保持關係時的完整性任何一方發生變化:

class Actor 
{ 
    public void AddMovie(Movie movie) 
    { 
     this.movies.Add(movie); 

     movie.AddActor(this); 
    } 
} 

NB該技術也必須在Movie類別上覆制。

我不明白你問的第二部分是什麼。

+0

說一部新電影發佈。其中的演員是新面孔,所以相應的Actor對象不存在。這將需要首先創建新的Actor對象。如何以透明的方式處理該案件。謝謝。 – q126y

+0

在這種情況下,我認爲我的答案依然存在。無論您將「Actor」添加到「Movie」還是相反,模型都必須保持其完整性。我的解決方案支持。 –