2009-08-05 10 views
2

基本的に、曜日のグリッドを持つタイムシートページ(ASP.NET MVC)のフラットビューモデルを作成しています。 WorkTimeプロパティは、データベースからの既存のWorkTimeであるか、既存のWorkTimeが存在しない場合はnullでなければなりません。C#リファクタリングこの乱雑なコード!

1週間しか表示されません(土曜日から金曜日)。私はそこに個々のプロパティを持っているので、私のビューの構文はもっと簡単になるはずです。

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

から来て、データベースに永続化されている日付のすべての時間がない要素(すべて真夜中の時間)を持っていないと土曜日から金曜日までの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); 
} 
+0

「土曜日」と「金曜日」は、検索しているアイテムの下限と上限です。なぜ彼らはプロパティになっているのですが、他のすべての日は何のために使われていますか? 0.o – Thorarin

+2

また、私はあなたのSOのトラックの記録と評判を持っている誰かが、今よりもこれを良くするために他の人たちを必要とする理由について幾分困惑しています。犯罪は意図されていない、私はちょうど驚いている。 – Thorarin

+0

haha​​ ...私は、私が必要とする目的のためにそれに満足していると思う。 Sat to Friが設定されているのは、サーバーにポストバックするときに参照する必要があるためです。 –

答えて

4

は小さなスタートだ:代わりに個々の変数を持つことの

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

あなたはのDayOfWeek列挙型を使用することができます。ここで

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

link

+0

あなたが週と地方の初日を考慮に入れていることを確認してください;) –

+0

さらに良い(?): 'var dayOfWeek = DateTime.Now.DayOfWeek;' –

+1

?これはどのように質問に答えますか?営業担当者は、1日ごとに固定された営業時間で多くの不動産を設定したいと考えています。 –

0

、あなたはWorkTimeへのDayOfWeekからマップ、および日時へのDayOfWeekから別のマップを持っているだろうか?申し訳ありませんが、私のC#が錆びているので、これはおそらく、かなり右ではないですが、あなたはそれがより次のようになり、ということがあった場合:

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

なぜないだけではなく、1つのWorkTimeプロパティを持って、そして作ること辞書を使用し、辞書の代わりに辞書を職場のリポジトリから返します。

+0

これは可能ですが、実際にはnull参照が必要です勤務時間はありません。 –

+0

辞書にない=作業時間はありませんか? :)もしあなたが望むなら、それらを 'null'値で追加することができます。キーは「null」にすることはできませんが、値はできます。 – Thorarin

+0

ええ、私のビュー(MVCを使用して)の構文について考えています。上記のようにすれば、ビューがよりシンプルになると思います –

4

これらの作業時間を保存する辞書を作成しないのはなぜですか? _workTimeRepository.GetByWorkAssignmentIDを使用して、この辞書を移植

private Dictionary<DayOfWeek, WorkTime> _workTimes; 

、非常に単純である必要があります。

関連する問題