gpt4 book ai didi

c# - 业务对象的组织和代码重复

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:10 24 4
gpt4 key购买 nike

我在网站上有标签:电影院、音乐会、俱乐部、剧院、 child 、其他。每个选项卡显示相应的事件和时间表。这是我的对象:
对于电影:
电影电影院CinemaSchedule
剧院:
表演剧院剧院时间表
等等。

现在考虑音乐会:
音乐会ConcertPlaceConcertPlaceSchedule
但这是不正确的,因为音乐会可能在俱乐部或剧院(例如)。同样的情况也发生在俱乐部身上。会举办不同的事件:音乐会和派对。

那么,组织类(class)的最佳方式是什么?另一个例子:我们有电影“穿 Boot 的猫”。一方面是这部电影,另一方面是卡通片( child 标签)。既然电影出现在《电影》和《 child 》中,就需要二次创作。

另一个问题,我会在例子中展示。

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 的一个区别是 TheaterSchedule(或 ClubSchedule,等等)。

如何避免这种重复?

谢谢,抱歉我的英语不好。

最佳答案

感觉您需要以不同的方式对其进行建模。

也许你可以有一个 Venue 对象,它表示发生事情的物理位置(带有子类,例如 CinemaTheatre),一个 Event 对象代表那些东西(例如 FilmPlay)和一个 Performance 代表这些东西的连接两个模型(因此将有两个外键,可能还有一个时间字段)。

关于c# - 业务对象的组织和代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com