Adi*_*rda 23 c# database serialization
我相信保存应用程序状态的最佳方法是传统的关系数据库,大多数时候,它的表结构几乎代表了我们系统的数据模型+元数据.
然而,我团队中的其他人认为,现在最好将整个对象图序列化为二进制或XML文件.
没必要说(但我仍然会说)第三次世界大战正在我们之间进行,我想听听你对这个问题的看法.
我个人讨厌序列化,因为:
我想听听你对此的看法.
Dav*_*ope 16
您没有说明它是什么类型的数据 - 很大程度上取决于您的性能,同时性,安装,安全性和可用性/集中化要求.
如果此数据非常大(例如,所讨论的对象的许多实例),则数据库可以通过其索引功能来帮助提高性能.否则它可能会伤害性能,或者难以区分.
如果您的应用程序同时由多个用户运行,并且他们可能希望编写此数据,则数据库会有所帮助,因为您可以依赖事务来确保数据的完整性.使用基于文件的持久性,您必须自己处理.如果数据是单用户或单实例,则数据库很可能是过度杀伤.
如果您的应用程序有自己的必须安装,那么使用数据库会给用户带来额外的负担,用户必须设置和维护(应用补丁等)数据库服务器.如果可以保证数据库可用并由其他人处理,则这不是问题.
数据的安全要求是什么?如果数据是集中的,具有多个用户(同时或顺序),则可能需要管理数据的安全性和权限.在没有看到数据的情况下,很难说使用基于文件的持久性或数据库来管理是否更容易.
如果数据仅限本地,则上述关于数据的许多问题都有针对基于文件的持久性的答案.如果您需要集中访问,答案通常指向数据库.
我的猜测是你可能不需要一个数据库,完全基于你主要从编程方便的角度而不是数据需求的角度来询问它.序列化,特别是在.NET中,是高度可定制的,可以轻松定制,只保留您需要的基本部分.对于这些数据的版本化也有众所周知的最佳实践,所以我不确定从这个角度来看数据库方面有什么优势.
关于跨平台问题:如果您不确定将来需要跨平台功能,请不要立即构建.在时机成熟(迁移等)时解决问题几乎肯定比现在限制你的开发更容易.通常,YAGNI.
关于在应用程序的各个部分之间共享数据:应该将其构建到应用程序本身,例如构建到访问数据的类中.不要将持久性机制重载为应用程序各部分之间的数据管道; 如果以这种方式重载它,则将持久状态转换为跨对象合约,而不是将其正确地视为对象私有状态的扩展.
这取决于你想要序列化的当然.在某些情况下,序列化非常容易.
(我曾经在Java中编写了一种时间轴程序,你可以在其中绘制并调整对象的大小.如果你准备好了,你可以将它保存在文件中(比如myTimeline.til).在那个momenet上有数百个保存的对象,画布上的位置,它们的大小,颜色,它们的内在特征,它们的特殊效果......
你可以打开myTimeLine.til并进一步工作.
所有这些只询问了几行代码.(只是使所有类及其依赖项可序列化)并且我的编码时间不到5分钟,我自己也感到惊讶!(这是我第一次使用序列化)
在时间轴上工作,您还可以为不同版本"保存"以及非常容易备份和邮寄的"直播"文件.
我认为在我的特殊情况下使用数据库会有点傻.但这当然只适用于类似文档的结构,就像Word一样.)
我的观点首先是:当然有几种情况下数据库不是最佳解决方案. 开发人员不是因为他们感到无聊而发明了序列化.
当然序列化除了实现速度之外还有其他一些重要的优点,比如在某些情况下根本不需要数据库!