首页 > 解决方案 > 如何设计不同程序使用的对象?

问题描述

让我们假设:

因此,问题是如何实现形状?

如果我不想让绘图程序知道它们可以被编辑,我应该如何设计这些形状对象?

目前我倾向于第二种选择。有没有我没有看到的第三种选择?你有什么建议,为什么?

标签: c#oopdesign-patternsencapsulation

解决方案


如果您要在程序之间交换文件,或者可能将它们存储很长时间并在程序更改后稍后加载它们,那么您不要只使用工作对象的默认序列化,它会写出私有字段并在您更改它们时中断。

在这些情况下,数据格式是对象接口的一部分。它需要被设计和指定。

设计数据格式与设计方法调用接口是不同的工作。您的主要考虑因素通常是:

  • 向后兼容性:你将如何确保你现在写的数据可以被未来的程序使用?这通常由版本控制方案处理。

  • 前向兼容性:您将如何确保未来程序写入的数据将尽可能地被今天的程序使用?这通常由扩展机制处理。

  • 语言独立性:您是否需要确保处理数据的程序易于/方便地用其他编程语言编写?这通常意味着您不依赖于由您的语言或库定义的复杂序列化格式。

  • 文本、二进制还是介于两者之间?:文本格式(通常基于 JSON、YAML 或 XML)便于调试且易于记录。二进制格式更紧凑。有时你可以使用中间立场。例如,MS Office 文件是打包在 .zip 存档中的文本文件。


推荐阅读