2

サービスは複数のドメイン クラスにまたがる更新に使用されると読みました。しかし、私はコマンド クラスを持っており、トランザクション更新を行うロジックをコマンド クラスに入れることには重大な欠点がある (または Grails パラダイムを壊す) かどうかを知りたいと思います。何かのようなもの:

class ObjectOneCommand {
...
    def save() {
        objectOneInstance.save()
        objectTwoInstance.save()
    }
}

そしてコントローラーで

ObjectOne.withTransaction { transactionStatus ->
    objectOneCommand.save()
}
4

3 に答える 3

4

私は Grails に慣れていないだけですが、私が理解していることから、コマンド オブジェクトは基本的に、着信パラメーターに対してデータ バインディングを行う賢い方法であり、それらをさらに検証したり、処理を行ったりすることができます。基本的には、ドメイン クラス自体からドメイン モデルの制約チェックを取得し、永続化のためにドメイン オブジェクトに渡される前にプロパティをマッサージします (多くの場合、サービスを介して)。

したがって、コマンド オブジェクト (私にとってはとにかく) は、ドメイン オブジェクトのトランザクション ビジネス ロジックの場所ではありません。

また、サービスは他のクラスに注入できるため、このようにビジネス ロジックをサービスで再利用できます。ロジックをコマンド オブジェクトに配置する場合、依存性注入はオプションではなく、異なるコマンド オブジェクト間でロジックを複製することになる可能性があります。

コマンドクラスにサービスを注入できるので、そのルートをたどるのは理にかなっていると思います。

于 2011-03-01T17:07:33.417 に答える
0

一般的に言えば、これは Grails パラダイムに反するものであり、ほとんどの MVC パラダイムにも反します。Ciaran が指摘したように、Command および Controller クラスに配置したロジックは再利用できません。他のコントローラーから (簡単に) 呼び出すことができないため、おそらく何度も書き直すことになります。サービスでこの永続化を行うメソッドを作成すると、def transactional = trueはるかに優れたものになります。

于 2011-03-01T23:27:04.503 に答える