私はウェブサイトにシネマ、コンサート、クラブ、劇場、子供、その他のタブがあります。各タブには、適切なイベントとスケジュールが表示されます。 これは私の物である:シネマ用
:
Film
、Cinema
、CinemaSchedule
シアター:
Performance
、Theater
、TheaterSchedule
のように。
Concert
、ConcertPlace
、ConcertPlaceSchedule
:ビジネスオブジェクトの構成とコードの複製
は今コンサートを検討してください。
しかし、これは正しくありません。コンサートがクラブや劇場などにあるかもしれないからです。 同じ状況がクラブにあります。コンサートやパーティーなど、さまざまなイベントが開催されています。
だから、クラスを整理する最良の方法は何ですか?もう一つの例:私たちは映画「ブーツのぬいぐるみ」を持っています。一方では、この映画、もう一つは漫画(子供のタブ)です。映画が「映画」に登場し、「子供」が映画を2度制作する必要があります。
もう1つ問題があります。
This is my repository for `Film`:
public class FilmRepository:BaseRepository<Film>
{
public FilmRepository(DatabaseContext database) : base(database)
{
}
/// <summary>
/// Loads films for specific period
/// </summary>
/// <param name="period"></param>
/// <returns></returns>
public IList<Film> GetFilmsForPeriod(PeriodEvent period)
{
switch (period)
{
case PeriodEvent.All:
return GetAllFilms();
case PeriodEvent.Today:
return GetFilmsForToday();
case PeriodEvent.Tomorrow:
return GetFilmsForTomorrow();
case PeriodEvent.Week:
return GetFilmsForWeek();
case PeriodEvent.FewWeek:
return GetFilmsForFewWeek();
case PeriodEvent.Month:
return GetFilmsForMonth();
case PeriodEvent.FewMonth:
return GetFilmsForFewMonth();
default:
return GetFilmsForToday();
}
}
// load films for today
private IList<Film> GetFilmsForToday()
{
return
Database.Films.Where(c => c.CinemaSchedules.Any(s =>
s.ShowDate.Value.Date == DateTime.Now.Date)).ToList();
}
//implementation another methods from above.
}
それぞれのリポジトリには同じメソッドがあります。代わりにCinemaSchedule
の1つの違いはTheaterSchedule
(またはClubSchedule
など)です。
この重複を避けるにはどうすればよいですか?
ありがとう、ごめんなさい、私の英語です。