CompilationUnit对象是否能够保存自身并编译到磁盘
本文关键字:编译 磁盘 保存 对象 是否 CompilationUnit | 更新日期: 2023-09-27 18:24:43
当有这种数据结构我以后想保存在磁盘上时,我永远不知道如何正确地对情况进行建模。
例如,我目前正在开发一个小型代码生成器。一般的想法是,我想在某个地方存储类的限定名及其相关内容,稍后我想将.java文件保存到磁盘,并通过javac
进行编译。目前还不完全清楚我是否想同时执行这两个操作,也就是说,将保存到磁盘为.java并通过javac
编译作为一个操作。我想有时我可能只想把.java文件写到磁盘上,而不需要编译。
class CompilationUnit {
String qualifiedName;
String contents;
}
现在,我的问题是如何建模。我应该有一个CompilationUnit
,它同时接受IFileSystem
和IJavaCompiler
作为参数,所以每次我"手头"有CompilationUnit
时,我都有执行这两个操作所需的一切,还是应该尝试将编译逻辑保留在类之外,作为CompilationUnit
只是一个数据对象?
一方面,OO认为应该在同一个对象上保持状态和行为,这有利于将限定名称及其内容保持在一起,并有可能将编译单元写入磁盘并进行编译
尽管如此,我还是对CompilationUnit
同时具有IFileSystem
和IJavaCompiler
依赖关系的想法感到不舒服,尽管我有点难以解释为什么会这样
我(理想主义者?)的直觉是,数据对象应该很容易实例化,从这个角度来看,每次我想将限定名称及其内容存储在一起时,都必须传入IFileSystem
和IJavaCompiler
,这会让人感到尴尬。这意味着,无论谁负责生成这些数据,都必须同时访问IFileSystem
和IJavaCompiler
,这有点奇怪。
我不确定我是否真的回答了我自己的问题。
该系统将进行测试,因此正确处理依赖关系问题至关重要。
谢谢!
如果将服务注入实体或价值对象,则很可能违反了单一责任原则。虽然我不知道这个域的详细信息,但IFileSystem
和IJavaCompiler
听起来很像服务——它们实际上不是对象状态的一部分,而是它可以使用的服务。