1

私はORMにまったく慣れておらず、MVCの経験が少しあるので、次のことを疑問に思っていました:

私はORMモデルを持っていUserますOrganization..すべてのユーザーを検索したいときorganization 1は、次のようにします:

$users = Model_User::query()->where('organisation_id', 1);

はそれをコントローラーに直接入れるべきですか、それとも他の場所に入れるべきですか?

4

2 に答える 2

3

理想的には、ORM (またはデータ層、永続性、またはリポジトリ) とコントローラーの間に別の層が必要です。これを services/AppServices/BLL と呼ぶことができます。

このレイヤーは追加のロジックを処理する必要がありますが、ORM はマップされたデータベース/その他のソースから直接データを取得する必要があり、コントローラーはユーザーの要求に応じて次のレイヤーを呼び出すだけです。

ORM:

Users GetUsers() //for all users

サービス:

Users GetUsersForOrganization(int orgId) //call orm method and filter for organization id
于 2013-07-27T09:20:37.430 に答える
0

MVC を使用する場合、常に値オブジェクト Data1 とマッパー Data1Mapper を使用します。ValueObject 自体はデータを保持するためのもので、マッパーには次のようなメソッドが含まれています: find、save、delete、fetchAll など...

コントローラーでマッパーをインスタンス化し、必要なメソッドにアクセスします。

例:

class DataMapper {
    public function __construct() {
        //fetch TableDateGateway
    }

    public function find() {
        //find by identifier
    }

    public function save($data) {
        //insert or update
    }
}

class Data {
    protected $_property;

    public function getProperty() {
        return $this->_property;
    }

    public function setProperty($value) {
        $this->_property = $value;
    }
}

class Controller {
    public function indexAction() {
        $id = 1;
        $mapper = new DataMapper();
        $data = $mapper->find($id); //--> returns if found a Data-Object
    }
}
于 2013-07-27T09:16:00.560 に答える