![]() |
1
35
一般来说,正确的方法是您的案例1。这维护了类的单一责任(不管它做什么),而没有将它耦合到特定的持久性机制(磁盘)。 您将看到一个更普遍的问题的具体情况:序列化。对于一个对象来说,有一些方法来指示它应该如何序列化是好的,也可以——毕竟,它是唯一知道反序列化它需要什么的实体。但是,如果您使对象保存到磁盘上,那么您已经将该对象与特定的实现紧密耦合。 相反,考虑创建一个通用的“编写器”可以用来将对象“序列化”到编写器序列化到的任何对象的接口。这样,您就能够序列化到磁盘、网络、内存,以及您实际需要序列化到的任何内容。:) |
![]() |
2
25
我会做
|
![]() |
3
9
这是一个例子,
战略设计模式
可以使用。你的
|
![]() |
4
3
我以前更喜欢选项2;但是,由于我已经开始真正地尝试理解和建模我正在工作的域,所以我更喜欢选项1。 想象一下如果你的模型车。为什么一辆车会知道如何坚持下去?它可能知道如何移动、如何启动和如何停止,但在车辆环境中保存了什么。 |
![]() |
5
3
另一种方法是使用访问者模式。让对象包含一个接受方法,该方法通过要处理/序列化的成员,并让一个访问者作为序列化程序。无论何时更新或更改序列化(从纯文本到XML再到二进制再到任何内容),都不需要更新对象。 我们有很好的工作经验。它很强大。 |
|
6
-3
这样做:
很明显,这不是一个完整的解决方案,但你应该有一个大致的想法。 |
![]() |
7
-4
我认为正确的方法是案例1,但是您的类可以这样定义,以便利用这两种方法:
这可以很容易地修改,将写入逻辑和初始化放在一个基类中,这样Bob类就更干净,并且独立于持久性。 |
![]() |
Mr. Kisus · 如何删除数字对中的第二个数字 3 年前 |
![]() |
Prince · 复制大型文件需要更多时间 3 年前 |
![]() |
altern · 输出haskell对象,忽略“show”声明 7 年前 |
![]() |
supermeerkat · 嵌套并行。For()循环和文件创建问题 7 年前 |
![]() |
Arka Pal · 关闭管道中未使用的端部 7 年前 |
|
Marta · 重命名提取文件的文件夹 7 年前 |
![]() |
Sean2148 · 如何在Java 8中使用CSV值作为构造函数参数 7 年前 |
![]() |
youR.Fate · 在c中向fstream写入二进制数据++ 7 年前 |
![]() |
Jon Lauridsen · 等待放在哪里? 7 年前 |