关于如何将运行时属性与类中的其他属性分离的最佳实践
本文关键字:属性 其他 分离 最佳 于如何 运行时 | 更新日期: 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;
}
另外,正如我已经说明过的,在谈到长度、速度、重量等问题时,请务必注明单位。我可能还会为这些添加一个状态,这样可以在数据输入期间隐藏过时的运行,火车等。