gpt4 book ai didi

c# - CompilationUnit 对象应该有办法保存自己并编译到磁盘吗?

转载 作者:行者123 更新时间:2023-11-30 09:40:37 24 4
gpt4 key购买 nike

当我稍后想将这种数据结构保存在磁盘上时,我永远不知道如何正确地模拟情况。

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

class CompilationUnit {
String qualifiedName;
String contents;
}

现在,我的问题是如何对此建模。我应该有一个CompilationUnit吗?将 IFileSystem 作为参数和 IJavaCompiler ,所以每次我“手里”都有一个CompilationUnit我拥有执行这两个操作所需的一切,或者我应该尝试将编译逻辑保留在类之外,成为 CompilationUnit只是一个数据对象?

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

尽管如此,我还是对拥有 CompilationUnit 的想法感到不安。兼顾IFileSystemIJavaCompiler依赖关系,虽然我很难解释为什么会这样。

我(理想主义者?)的直觉是数据对象应该易于实例化,在这种情况下,不得不传入 IFileSystem 会让人感到尴尬。和 IJavaCompiler每次我想将限定名称及其内容存储在一起时。这意味着负责生成此数据的人还必须能够访问 IFileSystem。和 IJavaCompiler ,这有点奇怪。

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

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

谢谢!

最佳答案

如果您将服务注入(inject)实体值对象,您很可能会破坏Single Responsibility Principle .虽然我不知道这个域的详细信息,但 IFileSystemIJavaCompiler 对我来说听起来很像 Services - 它们并不是真正的一部分对象的状态,但它可以使用的服务。

关于c# - CompilationUnit 对象应该有办法保存自己并编译到磁盘吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9307758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com