有关如何将运行时属性与类中的其他属性分开的最佳实践

时间:2011-07-30 22:21:04

标签: c# .net

我有一个序列化为db的对象。

问题是在同一个类或单独的类或派生类中保留运行时属性(如上次运行时间等)的位置?在这种情况下,最佳做法应该是什么?

已更新:例如:对象培训

属性:类型,重量,高度,速度等

运行时间:旅行开始日期,旅行结束日期

3 个答案:

答案 0 :(得分:3)

我假设您正在使用某种标准序列化程序。它们通常提供了通过使用属性来标记序列化属性的可能性。仅标记那些应该作为序列化的一部分持久保存的内容。

除此之外,我认为应该真正考虑使用序列化保存到数据库的解决方案。在某些情况下它是相关的,但将对象的属性映射到数据库中的列通常要好得多。

答案 1 :(得分:3)

查看现在添加的示例我会说你应该把它们移出来,而是使用封装 - 即具有“运行时”属性的一个TrainJourney类(这里真的不是正确的术语)和引用作为您的数据实体的Train实例。

只要数据实体直接绑定到数据实体,就可以向数据实体添加额外的属性(通常在部分类中)。这通常意味着计算值,延迟/缓存值,解释(IsOpen而不是Status == Status.Open等)。

在您的情况下,额外的属性与无关的概念有关;通过分离关注点,您可以通过将其混合到您的Train类来混淆事物。所以:不要。

答案 2 :(得分:0)

我会使用以下类结构:(“public / private”和为简洁而排除的属性)

// describes the run schedules
class RunSchedule {
  int RunScheduleId;         // only used by DB to uniquely identify record, never seen by user
  int RunId;
  DateTime StartTime;
}

// describes the runs, so repeat runs do not duplicate this information
class Run {
  int RunId;             // only used by DB to uniquely identify record, never seen by user
  string Name;           // unique run name as known by everyone, eg. "Chicago express"
  Train Train;
  string StartLocation;
  string EndLocation;
  TimeSpan Duration;
}

// describes the train-specific information, without duplicating anything
class Train {
  int TrainId;        // only used by DB to uniquely identify record, never seen by user
  string Name;        // unique train identifier as known by everyone
  TrainType Type;
}

// describes the train-common information, shared across trains of the same type
class TrainType {
  int TypeId;         // only used by DB to uniquely identify record, never seen by user
  string Description;
  double WeightMetricTonnes;
  double HeightMetres;
  double SpeedKms;
}

另外,正如我所说,在谈论长度,速度,重量等问题时,请确保说明单位。 我可能还会为这些添加状态,因此在数据输入过程中可以隐藏过时的运行,火车等。