2011-07-30 27 views
3

我有序列化为db的对象。有关如何将运行时属性与类中的其他属性分开的最佳实践

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

更新:例如:对象列车

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

运行时间:旅行开始日期,行程的最后一天

+0

你必须制定一些不是'运行时间属性'的东西。 .NET中有'设计时'属性,WPF和Winforms都有设计人员。代码生成器,它们运行在你的机器上而不是用户的机器上。这个问题的相关性是不可想象的。 –

+2

你的意思是“序列化”(存储为BLOB或CLOB等)还是“持久化”?另外,我不完全清楚你在运行时属性上的含义吗?你只是指你不需要存储的数据? –

+0

@Hans当然有*运行时属性(ICustomTypeDescriptor,动态等) - 但我怀疑这是OP的含义。 –

回答

3

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

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

在你的情况下,额外的属性涉及无关的的概念;通过分离你所关心的问题,你可以将这些问题混合到你的火车课程中,从而令人困惑。所以:不要。

3

我假设你正在使用某种标准串行器。它们通常提供了通过使用属性标记哪些属性被序列化的可能性。只标记那些应该作为序列化一部分保存的内容。

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

+0

OP可能意味着“坚持”而不是序列化,但我同意:) –

0

我将使用以下类结构:(排除为了简洁“公共/私有”和属性)

// 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; 
} 

而且,如我展示,当谈论之类的东西的长度,速度,重量等,请确保你说明单位。 我可能还会为这些添加一个状态,以便在数据输入过程中隐藏过时的运行,火车等。

相关问题