一个value Object和一个record什么不同?从有优点上说明。 难!(100分)

  • 主题发起人 主题发起人 蓝叶菱
  • 开始时间 开始时间

蓝叶菱

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TMyClass=class
public
propery C:STRING read FC;
...
end;
//
type
TMyFrame=record
C:STRING;
end;
begin
MyClass:TMyClass;
MyFrame:TMyFrame;
....
不要告诉我本质不同,
告诉我在设计上那些不同。和好处。?那个更有优点在哪里?
从内存上,设计思想上讨论。
 
record 不能有自己的方法,而 Class 有
record 使用前可以不用创建,申请就可以了.而 class 不行.必须先创建
不过在D2005 以后,这些区别很少了.

record 也偏向于 c++ 中的struct 了.可以有自己的方法与创建过程了.
 
相同点
两个都是对象,是变量;
不同点
Object可以加自己的属性,方法;而record不行,此对象是实体存在的,它只能加自己的属性和变量,而不能加入方法,此对象是不一定会存在实体的,是通过指针来定位的;
个人理解!
 
value object是一个没有方法的object,这个在用的时候和record相同。。

楼上回答有点偏。。。。
我理解的是,主要考虑的扩展性上的考虑,另外思想上比较复合facade的样子。。。
但是类比record麻烦,如果只是一个只读的类或者读写类,相对麻烦。

请高手谈谈。。。
 
value object绝对可以加入方法,可以用虚方法;
 
type
TMyClass=class
public
propery C:STRING read FC;
...
end;
//
在外部访问对象成员通过C访问FC(C++中,对编译器来说它是通过内联函数,是一种请求,具体Delphi编译器是怎么实现的,但我想原理也应该差不多)和访问Record型数据中的C,两者所花的CPU开销是不一样的.(C++中类似Record的struct.它默认的数据被访问方式都是Public)一个是通过请求,而另一个则是直接去读内存.
愚见而已....
 
楼上的,感觉应该既然类就应该优VMT列表,也就是说这个请求是这样的。但是一个不算太大的类或者记录,内存和CPU,开销应该不是决定的因素。。如果影响很大的话,但是我不知道究竟多大。。
因为我没有见过太大的RECORD。

估计很多书籍推荐使用VALUE OBJECT,主要考虑设计方法和扩展,但是设计一个CLASS远远比RECORD难。。。。
也有两外的一部分开销。
CLASS方法管理非常的好,对于配置可以采用RECORD,或者VALUE OBJECT,这样管理意义也不大。。。
 
class是OOP的,而record不是,但record占用资源少。
我现在尽量用class了,扩展方便些,天晓得代码重构的时候会有什么需求。
 
我觉得如果你有一组数据.打个比方:某软件需要用到串口.那么我存储串口信息.只会用Record,对串口状态的切换和保存串口的状态我会用Class(这里Class并不是狭义的Class,也可看做是对象).
我把串口的串口号,串口当前是否被使用.串口的波特率...都存放在Record数据类型中.系统有多少个串口我就New多少次这个Record数据类型.
然后把这个Record放在上面的Class成员中.Class的方法操作全部围绕这个Record进行.比如串口的打开和关闭状态切换,波特率的存储...
具体这样设计在速度上是否很好我不会考虑它,因为这些方面的影响相对于打开和关闭串口来说是微不足道的.太深入系统的东西,我搞不清楚,但是一般我们所写的代码也不会考虑到那么深的深度.
有的人说程序员只要考虑软件的安全性(不会因为某些意外的原因而崩溃)和逻辑性可读性(为了维护和升级)其他的让Intel去考虑,我觉得这句话虽然不完全正确,但有些方面还是可以引用的.
 
Record和Value Object 最大的区别我想应该是可继承方面的.
 
多人接受答案了。
 
后退
顶部