我有一个序列化为db的对象。
问题是在同一个类或单独的类或派生类中保留运行时属性(如上次运行时间等)的位置?在这种情况下,最佳做法应该是什么?
已更新:例如:对象培训
属性:类型,重量,高度,速度等
运行时间:旅行开始日期,旅行结束日期
答案 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;
}
另外,正如我所说,在谈论长度,速度,重量等问题时,请确保说明单位。 我可能还会为这些添加状态,因此在数据输入过程中可以隐藏过时的运行,火车等。