2012-02-16 5 views
2

後でディスクに保存したいデータ構造があるときに、状況を正しくモデル化する方法がわかりません。CompilationUnitオブジェクトには、それ自身を保存してディスクにコンパイルする手段が必要ですか?

たとえば、私は現在、小さなコードジェネレータに取り組んでいます。一般的な考え方は、クラスの修飾された名前と関連するコンテンツの両方を保存したいということです。後で.javaファイルをディスクに保存し、javacでコンパイルします。 .javaとしてディスクに保存し、javacを使ってコンパイルするだけのアクションを1つのアクションとして実行することを、私は両方の操作をしたいと思うことは完全にはっきりしていません。コンパイルせずに.javaファイルをディスクに書きたいと思うことがあります。

class CompilationUnit { 
    String qualifiedName; 
    String contents; 
} 

ここで私の質問はこれをモデル化する方法です。私はCompilationUnitを引数として受け取り、IFileSystemIJavaCompilerを持っていなければならないので、私が "手に持っている"たびにCompilationUnit私は両方のアクションを行うために必要なすべてを持っているか、ちょうどデータオブジェクトであるCompilationUnitですか?

一方、このオブジェクト指向の考え方では、同じオブジェクトに状態と動作の両方を保持する必要があります。修飾された名前とその内容をディスクに書き込んでコンパイルする可能性があります。私はそれがそうである理由を説明するために少し難しいですが、

その事実にもかかわらず、私はしかし、CompilationUnitは両方IFileSystemIJavaCompiler依存関係を取ったの考えと不快に感じることができません。

私の(理想主義?)直観は、データオブジェクトをインスタンス化するのが簡単でなければならないということです。そのビューでは、修飾された名前を格納するたびにIFileSystemIJavaCompilerを渡す必要があります。内容をまとめてつまり、このデータの生成を担当する者は誰でも、IFileSystemIJavaCompilerの両方にアクセスする必要があります。これは奇妙なものです。

私は実際に私自身の質問に答えたかどうかはわかりません。

このシステムはテストされるので、依存関係の問題を正しく処理することが重要です。

ありがとうございます!

答えて

2

あなたはエンティティまたはオブジェクト、あなたが最も可能性が高いSingle Responsibility Principle壊している値にサービスを注入した場合。私はこのドメインの詳細を知らないのですが、IFileSystemIJavaCompilerとよく似ています。私にはサービスがあります。実際にはオブジェクトの状態の一部ではありません。

+0

はい。私の疑惑の確認をありがとう。 –

関連する問題