CompilationUnit对象是否能够保存自身并编译到磁盘

本文关键字:编译 磁盘 保存 对象 是否 CompilationUnit | 更新日期: 2023-09-27 18:24:43

当有这种数据结构我以后想保存在磁盘上时,我永远不知道如何正确地对情况进行建模。

例如,我目前正在开发一个小型代码生成器。一般的想法是,我想在某个地方存储类的限定名及其相关内容,稍后我想将.java文件保存到磁盘,并通过javac进行编译。目前还不完全清楚我是否想同时执行这两个操作,也就是说,将保存到磁盘为.java并通过javac编译作为一个操作。我想有时我可能只想把.java文件写到磁盘上,而不需要编译。

class CompilationUnit {
    String qualifiedName;
    String contents;
}

现在,我的问题是如何建模。我应该有一个CompilationUnit,它同时接受IFileSystemIJavaCompiler作为参数,所以每次我"手头"有CompilationUnit时,我都有执行这两个操作所需的一切,还是应该尝试将编译逻辑保留在类之外,作为CompilationUnit只是一个数据对象?

一方面,OO认为应该在同一个对象上保持状态和行为,这有利于将限定名称及其内容保持在一起,并有可能将编译单元写入磁盘并进行编译

尽管如此,我还是对CompilationUnit同时具有IFileSystemIJavaCompiler依赖关系的想法感到不舒服,尽管我有点难以解释为什么会这样

我(理想主义者?)的直觉是,数据对象应该很容易实例化,从这个角度来看,每次我想将限定名称及其内容存储在一起时,都必须传入IFileSystemIJavaCompiler,这会让人感到尴尬。这意味着,无论谁负责生成这些数据,都必须同时访问IFileSystemIJavaCompiler,这有点奇怪。

我不确定我是否真的回答了我自己的问题。

该系统将进行测试,因此正确处理依赖关系问题至关重要。

谢谢!

CompilationUnit对象是否能够保存自身并编译到磁盘

如果将服务注入实体价值对象,则很可能违反了单一责任原则。虽然我不知道这个域的详细信息,但IFileSystemIJavaCompiler听起来很像服务——它们实际上不是对象状态的一部分,而是它可以使用的服务。