一段时间以来,我一直在为我的(深奥的,如果你愿意的话)编程语言开发一个 C++ 解释器。我注意到的主要事情之一:我从一个灵活的概念开始,我编写的代码越多(Tokenizer->Parser->Interpreter),整个系统变得越不灵活。
例如:我一开始没有实现一个include
函数,但是解释器已经启动并运行了——我在实现它时遇到了极大的困难,就像后来“修补一些东西”一样。我的系统很快就失去了灵活性。
- 我怎样才能学会在开发过程中保持相对较小的 C++ 项目尽可能灵活和可扩展?
一段时间以来,我一直在为我的(深奥的,如果你愿意的话)编程语言开发一个 C++ 解释器。我注意到的主要事情之一:我从一个灵活的概念开始,我编写的代码越多(Tokenizer->Parser->Interpreter),整个系统变得越不灵活。
例如:我一开始没有实现一个include
函数,但是解释器已经启动并运行了——我在实现它时遇到了极大的困难,就像后来“修补一些东西”一样。我的系统很快就失去了灵活性。
如果你需要保留
在开发过程中尽可能灵活和可扩展的 C++ 项目
那么你没有产品规格,你没有真正的目标,也没有办法定义成品。
对于商业产品,这是最糟糕的情况。套用一位知名博主(不记得是谁)“在你定义你不打算做什么之前,你没有产品。”
对于个人项目,这可能不是问题。将其记下来以供将来参考。重构并继续前进。
在开始编码之前定义项目的结构。概述您的主要目标,并考虑如何实现这一目标。
对标题进行编码。
看看是否有可能使用这组接口实现每个功能
如果没有 -> 回到 (2)
如果是 -> 代码 .cpp 文件
享受。
当然,这不适用于真正的大型项目。但是,如果您的设计是模块化的,那么将项目分成单独的部分应该没有任何问题。
不要害怕进化(重构)。
如果有许多适合某个主题的类,请创建一个通用基类。
代替硬编码数据成员,使用指向抽象基类的指针。
例如,而不是使用std::ifstream
use std::istream
。
在我的项目中,我有阅读和写作的抽象类。支持读写的类使用这些接口。我可以在不更改任何代码的情况下将专门的读者传递给这些类。数据库读取器将从基 Reader 类继承,因此可以在使用读取器的任何地方使用。