如何在类之间实现双向协作?

时间:2015-11-04 14:01:19

标签: oop design-patterns object-oriented-analysis

我正在尝试设计视频租赁软件。我希望Movie课程中列出了在电影中扮演的Actor *。我还希望Actor列出他已采取行动的Movie *

  1. 如何确保两个列表之间没有不一致?

  2. 如何初始化Movie对象,Actor对象不存在[但必须创建]?

1 个答案:

答案 0 :(得分:1)

您可以通过控制用户如何管理关系和保护不变量来确保两者之间的一致性。例如,确保Actor的{​​{1}}和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);
   }
}

<强> N.B。此技术还必须在Movie类上复制。

我不明白你在问题的第二部分提出的要求。