2012-02-20 7 views
0

ORMを追加したい中規模のプロジェクトを継承しました。私はすべての通常のオプションDoctrine、Propel redbeanをチェックアウトしましたが、それらはすべて、特定の実装でビジネスオブジェクトを汚染するように要求しているようです。私が本当に好きなのは、ゲッターやセッターなどでビジネスオブジェクトを渡し、ORMに値を保持させることです。私の主な関心事は、アプリケーションをORMに関連付けることではありません。ビジネスオブジェクトをポーリングしないPHP ORM

+0

'ORM'にアプリを抱き合わせていないが - プログラマは**リアル**問題を解決するため、哲学者は、抽象的問題のための抽象ツールを見つけます。私が言いたいのは、ORMに使用できる抽象的なコードを書くことは、実際には意味をなさないということです。あなたはすべての賛否両論を持ついくつかのツールを使用するか、何年もの間pixieダストを探します。 – zerkms

+0

:-)うん、@zerkms、あなたの言っていることを知っている、私は問題のいくつかは、特定のORMで弾丸をかむだけの自信がないと思う。 – code4pay

+0

私が意図したことを説明するだけで(意図は無礼ではありませんでした)、具体的な解決方法は抽象的ではありません。これにより、効率的で便利なコードを書くことができます。だから、もし私があなただったらDoctrine2を選ぶでしょう。 – zerkms

答えて

2

Doctrine2を検討してください。それはActiveRecord(私はあなたが "汚染"と考える)を実装していませんが、代わりにDataMapperパターンを実装しています。あなたはannotationsを使ってDoctrineを設定できます。

<?php 
/** @Entity **/ 
class Post 
{ 
    /** @Id @GeneratedValue @Column(type="integer") **/ 
    protected $id; 
    /** @Column(type="string") **/ 
    protected $title; 
    /** @Column(type="text") **/ 
    protected $body; 
} 

そして

<?php 

use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 

require_once 'Doctrine/Common/ClassLoader.php'; 

$loader = new \Doctrine\Common\ClassLoader("Doctrine"); 
$loader->register(); 

$dbParams = array(
    'driver' => 'pdo_mysql', 
    'user' => 'root', 
    'password' => '', 
    'dbname' => 'tests' 
); 
$path = 'path/to/entities'; 
$config = Setup::createAnnotationMetadataConfiguration($path, true); 
$entityManager = EntityManager::create($dbParams, $config); 
.................. 
$entityManager->persist($post); 
+1

Doctrineを見たすべてのものの@FractalizeRが最高の抽象化を持っているようです。オブジェクトクラスに含まれている関連モデルに対して特別な "Doctrine" ArrayCollection型を使用していたのは、それを汚染していたと思ったのです。とにかく例では。 – code4pay

関連する問題