同じタイプの 2 つのオブジェクトを比較し、違いをFieldChange
オブジェクトのリストに返しています。現在、このように各フィールドの比較をリストしていますが、これは少し最適ではないようです。
繰り返しを避けるために、以下のコードをリファクタリングするよりクリーンな方法はありますか? 以下に 2 つのコード セットがありますが、実際には約 20 の比較があります。
var changes = new List<FieldChange>();
if (proposedUpdatedProject.StatusId != existingProject.StatusId)
{
var previousStatusName = existingProject.StatusShortName;
existingProject.Status = ProjectModel.Repository.Fetch<ProjectStatus>(proposedUpdatedProject.StatusId);
changes.Add(new FieldChange { FieldName = "Status", PreviousValue = previousStatusName, NewValue = existingProject.StatusShortName });
}
if (proposedUpdatedProject.TechOwnerId != existingProject.TechOwnerId)
{
var previousTechOwnerName = existingProject.TechOwnerName;
existingProject.TechOwner = ProjectModel.Repository.Fetch<Person>(proposedUpdatedProject.TechOwnerId);
changes.Add(new FieldChange { FieldName = "Tech Owner", PreviousValue = previousTechOwnerName, NewValue = existingProject.TechOwnerName });
}
注: すべてのオブジェクトは、BaseObj と呼ばれる同じオブジェクトから派生していることに注意してください。また、同等のフィールドの値を FieldChange オブジェクトに入れるだけではないことに注意してください (id 対 Name プロパティ)。