初期の問題
基本的に1行しか異なる異なるメソッドがある場合、1つのメソッドを作成してDRYにする方法はありますか。
例:
def showA( ) {
def instance
try {
instance = A.findById( params.id )
} catch ( Exception e ) {
def message = "Error while retrieving details for the given id ${ params.id }, $e"
log.error message
responseAsJson( 400, "Invalid id", message )
return false
}
return checkAndRender(instance, params.id);
}
def showB( ) {
def instance
try {
instance = B.findByBId( params.BId )
} catch ( Exception e ) {
def message = "Error while retrieving details for the given id ${ params.id }, $e"
log.error message
responseAsJson( 400, "Invalid id", message )
return false
}
return checkAndRender(instance, params.id);
}
したがって、1 つのメソッドを作成し、単純にパラメーターとして渡す方法はありますか。
- ドメインクラス
- 検索するID
それとも、代わりに SQL ステートメントを渡すほうがよいでしょうか?
アップデート
@dmahapatro のコメントに基づいて、次のことを思いつきました。
def showA( ) {
def clos = {id -> A.findByAId( id ) }
return findAndShow(clos, params.AId, params )
}
def showB( ) {
def clos = {id -> B.findByBId( id ) }
return findAndShow(clos, params.BId, params )
}
def findAndShow(Closure closure, def id, def p)
{
def instance
try {
instance = closure(id)
}
catch ( Exception e ) {
def message = "Error while retrieving instance details for the given id ${ id }, $e"
log.error message
responseAsJson( 400, "Invalid Id", message )
return false
}
return checkAndRender(instance, id);
}
残りの問題は次のとおりです。
- さらにクリーンアップする方法/よりクリーンにする方法。
警告を回避する方法:
[ApiController] の [findAndShow] アクションは、タイプ [groovy.lang.Closure] のパラメーターを受け入れます。インターフェイス型と抽象クラス型は、コマンド オブジェクトとしてサポートされていません。このパラメーターは無視されます。
def findAndShow(Closure closure, def id, def p)