グラフィカルプログラミング言語の仮想マシン(「VM」)を提供するC++で記述されたライブラリがあります。ソースコードとして画像(pngファイルなど)を使用し、命令を実行します。VMはさまざまなタイプのアプリケーション(コンソール、GUI)で使用されるため、libの目的は可能な限り柔軟にすることです。
問題は、VMとイメージオブジェクトの関係はどうあるべきかということです。アグリゲーション(VMコンストラクターは既存のイメージインスタンスをパラメーターとして使用する)またはコンポジション(VMコンストラクターはイメージファイルパスを文字列パラメーターとして使用する)のどちらにする必要がありますか?
コンポジションとは、外側(VM)オブジェクトが内側オブジェクト(イメージ)なしでは存在できない場所です。この場合、VMは存在できますが、イメージがないと役に立ちません(コードがない場合は命令を実行できません)。したがって、文字列パラメータを受け取り、画像オブジェクトを独自に作成および破棄する必要があります。しかし、文字列ファイルパスを検証するのはどうですか(画像がないか、ファイルが画像ではないか、画像のバイナリが破損していないかどうかを確認してください)-この検証はどこに実装する必要がありますか?VMコンストラクターだと思いますか?
一方、VMが1つのイメージを別のイメージに置き換えることができる場合、それは集約である可能性があります(Java仮想マシンのように)。しかし、それが適切なアプローチであるかどうかはわかりません。VMは、イメージにバインドされているすべてのイメージポインターとデータスタックをリセットする必要があります。たぶん、1つのイメージごとに1つのVMが、よりクリーンで論理的なソリューションです。
この場合、集約または構成を選択しますか?回答ありがとうございます。