簡體   English   中英

C#重構這個凌亂的代碼!

[英]C# refactor this messy code!

我基本上是為一個時間表頁面(ASP.NET MVC)創建一個平面視圖模型,它有一個星期幾的網格。 WorkTime屬性應該是數據庫中的現有WorkTime,如果沒有,則為null。

將只顯示1周(周六至周五)。 我在那里有各自的屬性,以便我的視圖中的語法應該更簡單。

+------+-----+-----+-----+-----+-----+-----+-----+
| Desc | Sat | Sun | Mon | Tue | Wed | Thu | Fri |
+------+-----+-----+-----+-----+-----+-----+-----+
|______|_____|_____|_____|_____|_____|_____|_____|
|______|_____|_____|_____|_____|_____|_____|_____|
|______|_____|_____|_____|_____|_____|_____|_____|
|______|_____|_____|_____|_____|_____|_____|_____|

來自和持久存儲到數據庫的所有日期都沒有Time元素(所有午夜時間),並且星期六到星期五DateTime屬性都已設置。

我正在設置的屬性

public WorkTime SaturdayWorkTime { get; private set; }
public WorkTime SundayWorkTime { get; private set; }
public WorkTime MondayWorkTime { get; private set; }
public WorkTime TuesdayWorkTime { get; private set; }
public WorkTime WednesdayWorkTime { get; private set; }
public WorkTime ThursdayWorkTime { get; private set; }
public WorkTime FridayWorkTime { get; private set; }

目前的迭代......

public DateTime Saturday { get; private set; }
public DateTime Sunday { get; private set; }
public DateTime Monday { get; private set; }
public DateTime Tuesday { get; private set; }
public DateTime Wednesday { get; private set; }
public DateTime Thursday { get; private set; }
public DateTime Friday { get; private set; }

_workTimes = _workTimeRepository.GetByWorkAssignmentID(WorkAssignment.ID, Saturday, Friday);
SaturdayWorkTime = GetWorkTimeForDay(DayOfWeek.Saturday);
SundayWorkTime = GetWorkTimeForDay(DayOfWeek.Sunday);
MondayWorkTime = GetWorkTimeForDay(DayOfWeek.Monday);
TuesdayWorkTime = GetWorkTimeForDay(DayOfWeek.Tuesday);
WednesdayWorkTime = GetWorkTimeForDay(DayOfWeek.Wednesday);
ThursdayWorkTime = GetWorkTimeForDay(DayOfWeek.Thursday);
FridayWorkTime = GetWorkTimeForDay(DayOfWeek.Friday);

用這個輔助方法......

private WorkTime GetWorkTimeForDay(DayOfWeek dow)
{
    return _workTimes.FirstOrDefault(x => x.Date.DayOfWeek == dow);
}

這是一個小小的開始:

private WorkTime GetWorkTimeForDay(DayOfWeek dw)
{
    return workTimes.FirstOrDefault(x => x.Date.DayOfWeek == dw);
}

為什么不創建一個字典來存儲這些工作時間?

private Dictionary<DayOfWeek, WorkTime> _workTimes;

使用_workTimeRepository.GetByWorkAssignmentID填充此字典應該非常簡單。

你可以使用DayOfWeek枚舉。

DateTime now = DateTime.Now;
var dayOfWeek = now.DayOfWeek;

鏈接

您可以擁有從DayOfWeek到WorkTime的地圖,以及從DayOfWeek到DateTime的另一個地圖,而不是擁有單個變量嗎? 對不起,我的C#生銹了,所以這可能不太對,但如果你有,那么看起來會更像這樣:

for (DayOfWeek day : allDays) 
    workTimes(day) = repository.FirstOrDefault(dateTimes(day));

為什么不只是擁有一個WorkTime屬性,並使其成為一個Dictionary並從您的工作時間存儲庫返回字典(而不是您的列表)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM