我在我的视图状态中存储了一些对象,我想知道创建一个类是否有任何缺点 Serializable
?
制作所有课程是不好的做法 Serializable
?
我在我的视图状态中存储了一些对象,我想知道创建一个类是否有任何缺点 Serializable
?
制作所有课程是不好的做法 Serializable
?
首先。避免使用viewstate。
通常,序列化(文本)用于传输对象。
您应该避免将任何类标记为不是DTO(数据传输对象)或消息类的可序列化。我们这样做有几个原因。以序列化格式提取类的内容可能没有非DTO类的方法信息(在原始程序集中)。其次,类可以引用资源(数据库连接,文件句柄等)不要序列化这些,因为除非明确设计,但序列化不会重新建立资源连接和状态,但仍然是一个坏主意。
总而言之:当你有上下文方法并存储数据供第三方使用时,请不要序列化。 (就像使用方法的服务响应是一个坏主意)。并且当类包含资源引用时不要序列化。尽可能保持可序列化对象不受方法影响。这可能需要稍微考虑一下服务类型模式。
序列化DTO和消息。
这更像是一种设计选择。
将其标记为 [Serializable]
(要么 ISerializable
)任何使用的东西都是必要的 BinaryFormatter
,可能包括默认配置下的viewstate。至于良好与不良的做法......好吧,大多数课程 不需要序列化和IMO即使它们正在使用 BinaryFormatter
并不总是最好的选择*。特别是,将其标记为两者 [Serializable]
和 [DataContract]
将导致IIRC例外。
* =实际上,IMO BinaryFormatter
是 非常稀有 一个不错的选择,但我可能有偏见......我故意不使用viewstate; p
制作所有课程是一种很好的做法 实际上是Serializable 如 Serializable
。我会用的 常识,并为那些用于跨越流程边界的类(DTO类)设置它。
所以那些类: