В моем приложении несколько бизнес-объектов (C #, Winforms, WinXP).Когда пользователь выполняет какое-либо действие в пользовательском интерфейсе, каждый из этих объектов изменяется и обновляется различными частями приложения.После каждой модификации мне нужно сначала проверить, что изменилось, а затем записать эти изменения, внесенные в объект.Цель регистрации этого состоит в том, чтобы создать всестороннее отслеживание действий, происходящих в приложении.
Многие из этих объектов содержат списки других объектов, и эта вложенность может иметь несколько уровней глубины.2 основных требования для любого решения:
- для максимально точного захвата изменений
- при минимальных затратах на производительность.
например, бизнес-объекта:
public class MainClass1
{
public MainClass1()
{
detailCollection1 = new ClassDetailCollection1();
detailCollection2 = new ClassDetailCollection2();
}
private Int64 id;
public Int64 ID
{
get { return id; }
set { id = value; }
}
private DateTime timeStamp;
public DateTime TimeStamp
{
get { return timeStamp; }
set { timeStamp = value; }
}
private string category = string.Empty;
public string Category
{
get { return category; }
set { category = value; }
}
private string action = string.Empty;
public string Action
{
get { return action; }
set { action = value; }
}
private ClassDetailCollection1 detailCollection1;
public ClassDetailCollection1 DetailCollection1
{
get { return detailCollection1; }
}
private ClassDetailCollection2 detailCollection2;
public ClassDetailCollection2 DetailCollection2
{
get { return detailCollection2; }
}
//more collections here
}
public class ClassDetailCollection1
{
private List<DetailType1> detailType1Collection;
public List<DetailType1> DetailType1Collection
{
get { return detailType1Collection; }
}
private List<DetailType2> detailType2Collection;
public List<DetailType2> DetailType2Collection
{
get { return detailType2Collection; }
}
}
public class ClassDetailCollection2
{
private List<DetailType3> detailType3Collection;
public List<DetailType3> DetailType3Collection
{
get { return detailType3Collection; }
}
private List<DetailType4> detailType4Collection;
public List<DetailType4> DetailType4Collection
{
get { return detailType4Collection; }
}
}
//more other Types like MainClass1 above...
Я могу предположить, что у меня будет доступ к старым значениям и новым значениям объекта.
В этом случае я могу придумать 2 способапопытаться сделать это, не сказав, что явно изменилось.
- использовать отражение и перебирать все свойства объекта и сравнивать их с соответствующими свойствами более старого объекта.Зарегистрируйте любые свойства, которые изменились.Этот подход кажется более гибким, так как мне не нужно было бы беспокоиться, если какие-либо новые свойства будут добавлены к любому из объектов.Но это также может показаться слишком тяжелым.
- Внесите изменения в установщик всех свойств всех объектов.Кроме того факта, что мне понадобится изменить много кода, это кажется более грубой силой.Это будет сложным и негибким в обслуживании, если кто-нибудь обновит какой-либо из типов объектов.Но таким образом, это также может быть преформой, так как мне не нужно будет проверять, что изменилось, и записывать, какие именно свойства были изменены.Добро пожаловать