私はORMにまったく慣れておらず、MVCの経験が少しあるので、次のことを疑問に思っていました:
私はORMモデルを持っていUser
ますOrganization
..すべてのユーザーを検索したいときorganization 1
は、次のようにします:
$users = Model_User::query()->where('organisation_id', 1);
私はそれをコントローラーに直接入れるべきですか、それとも他の場所に入れるべきですか?
理想的には、ORM (またはデータ層、永続性、またはリポジトリ) とコントローラーの間に別の層が必要です。これを services/AppServices/BLL と呼ぶことができます。
このレイヤーは追加のロジックを処理する必要がありますが、ORM はマップされたデータベース/その他のソースから直接データを取得する必要があり、コントローラーはユーザーの要求に応じて次のレイヤーを呼び出すだけです。
ORM:
Users GetUsers() //for all users
サービス:
Users GetUsersForOrganization(int orgId) //call orm method and filter for organization id
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
}
}