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

本文关键字:属性 其他 分离 最佳 于如何 运行时 | 更新日期: 2023-09-27 18:03:57

我有一个对象序列化成db.

问题是在哪里保持运行时属性(如上次运行时等),在同一个类或单独的类或派生类?这种情况下的最佳实践应该是什么?

已更新:例如:Object Train

属性:字体、重量、高度、速度等

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

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

看看现在添加的例子,我想说你应该把它们移出去,而不是使用封装-即一个具有"runtime"属性的TrainJourney类(在这里真的不是正确的术语)和一个对Train实例的引用,这是你的数据实体。

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

在你的例子中,额外的属性与不相关的概念相关;通过关注点分离,您可以将其混合到Train类中,从而使事情变得混乱。所以:不要。

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

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

我将使用以下类结构:(为简洁起见,"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;
}

另外,正如我已经说明过的,在谈到长度、速度、重量等问题时,请务必注明单位。我可能还会为这些添加一个状态,这样可以在数据输入期间隐藏过时的运行,火车等。