3

私はMVCの初心者です(私の例としてcodeIgniterを使用しています)。MVCファットモデルとスキニーコントローラーを3回読んだことがありますが、これは次のとおりです。

  • コントローラがモデルを呼び出し、ビューでレンダリングされるデータを渡す間、モデルはハードワークを実行します

しかし、私には1つの混乱があります。たとえば、データベース内の製品データを削除する管理ページがあり、次のコードがあります(codeIgniterを使用)。

public function deleteProduct($id = '')
    {
        if( is_digit($id))
        {
            $this->load->model('productModel');
            $this->productModel->deleteById($id);

            //oops product has images in another DB table and in server, so i need to delete it
            $success = $this->_deleteProductImages($id);
        }
        else
        {
            //redirect because of invalid param
        }

            //if success TRUE then load the view and display success
            //else load the view and display error
    }


protected function _deleteProductImages($productId)
{
        $this->load->model('productModel');

        //return array of images path
        $imgs = $this->productModel->getImagesPath($productId);

        // after i got the imgs data, then delete the image in DB that references to the $productId
        $this->productModel->deleteImage($productId);
        foreach($imgs as $imgPath)
        {
            if(file_exists $imgPath) unlink($imgPath);
        }
}

私の質問は:

シンコントローラーとファットモデルの概念では、メソッド_deleteProductImages($id)をproductModelに移動する必要がありますか、それともそのままにしておく必要がありますか?別のより良いアプローチがある場合は、ここで私を案内してください

4

1 に答える 1

1

私のモデルには、製品を削除するためのメソッドがあります。このメソッドは、製品を削除するために必要なすべての作業を行います (関連する DB レコード、ファイルなどの削除を含む)。

操作が成功した場合、メソッドは TRUE を返します。

関連するレコードまたはファイルを削除できなかった場合は、その操作でそのエラーをログに記録し、場合によっては UI でエラー メッセージを表示して続行します。

メソッドは、他のモデルの他のメソッドを呼び出す場合があります...たとえば、すべての製品の属性を格納する product_attributes モデルがあるとします。そのモデルには、delete_by_product_id() というメソッドがある場合があります。その場合、製品モデルは product_attributes->delete_by_product_id() を呼び出し、関連付けられたレコードの削除を処理します。

于 2013-03-22T14:21:07.647 に答える