ReaderInterface と WriterInterface という 2 つの非常に基本的なインターフェイスを作成しましたが、難問を説明する必要がないため、この例から WriterInterface を削除しました。
ReaderInterface.php
interface ReaderInterface
{
public function read();
}
Datatable という具象クラスがあります。
データテーブル.php
class Datatable
{
protected $cols;
protected $rows;
protected $reader;
public function __construct()
{
$this->cols = array();
$this->rows = array();
$this->reader = null;
}
public function setReader(ReaderInterface $reader)
{
$this->reader = $reader;
}
public function load()
{
//Contents to follow below.
}
}
次のようにデータテーブル インスタンスをインスタンス化します。
$db = new PDO("mysql:host=localhost;port=3306;dbname=test", "user", "pass"); //Let's pretend this is a good connection.
$datatable = new Datatable();
$datatable->setReader(new DatatableReader($db));
$datatable->load();
私の質問は、DatatableReader を実装して、渡したデータベースから読み取り、Datatable オブジェクトに書き込みできるようにすること$this->cols
です$this->rows
。
すぐに2つのアプローチが見えます。
1.依存性注入
class DatatableReader implements ReaderInterface
{
protected $db;
protected $datatable;
public function __construct(Datatable &$datatable, PDO &$db)
{
$this->datatable = $datatable;
$this->db = $db;
}
public function read()
{
//Execute prepared statement which returns 5 records.
//Get the columns, and place them into an array.
foreach ($columns as $col) {
$this->datatable->addColumn($col); //Add a column to the datatable.
}
}
}
次に、私のDatatable::load()
メソッドは次のように実装されます。
public function load()
{
if ($this->reader != null)
$this->reader->read();
}
2. read() からの弱い型付けの戻り値。
class DatatableReader implements ReaderInterface
{
protected $db;
public function __construct(PDO &$db)
{
$this->db = $db;
}
public function read()
{
//Execute prepared statement which returns 5 records.
//Get the columns, and place them into an array.
return $columns;
}
}
load()
次に、次のようにメソッドを呼び出します。
public function load()
{
if ($this->reader != null) {
$retval = $this->reader->read();
//Do stuff with the array of information returned from the reader.
}
}
質問
- これら 2 つのオプションのうち、どちらが最適な設計ですか?
- 私が見落としている 3 番目のオプションはありますか?