2013-03-29 34 views
2

我有一个合同“ArticleStorage”每个存储必须订阅有效的模型。 诚然,这不是问题,我的问题是:在分页......或“结果修改”,在这种情况下使用fetchall,我想改变自己的行为,但没有加入参数等修饰案或不?

<?php 

interface ArticleStorage 
{ 
    // public function insert(); 
    // public function update(); 
    // public function delete(); 
    public function fetchAll(); 
} 

class MySQLArticleStorage implements ArticleStorage 
{ 
    public function fetchAll() 
    { 
     // SELECT * FROM `articles`; 
    } 
} 

? >

我的模型是如何工作的。

class ArticlesModel 
{ 
    public function __construct(ArticleStorage $storage) 
    { 

    } 
} 
在这种情况下

,我想到了“ArticleStorage”,但不知道是哪个“存储”,是考虑,真的......我想分页或应用效果的修改,使用存储。

class MySQLArticleResultsModifier 
{ 
    public function __construct(MySQLArticleStorage $storage) 
    { 

    } 
    public function fetchAll() 
    { 
     // ... 
    } 
} 

在分页的情况下,我怎么能修改ArticleStorage使用fetchall和应用我的修改后的查询?

+0

在你设计,我在等一个接口来获取一个网页。你期望'Modifier'类的'fetchAll'返回一个页面而不是所有的结果吗? – Sameer

+0

我认为类MySQLArticleResultsModifier还应扩展MySQLArticleStorage和实例传递给构造 –

+1

在我看来,使用fetchall和分页是不相容的概念。为什么不添加一个方法fetchRange(start,end)? –

回答

0

有没有在您的模型要求是另一个使用fetchall的顶部使用fetchall可能的情况下;我不这么认为,事实上这是你如何决定,如果你需要一个装饰与否,回答这个问题自己

  • 是你所喜欢的装饰{像一个真正的思想使作品的装饰功能装饰,你可以在你的圣诞树上装饰星星{decoration1},还有一些玩具在你的树上{decoration2}在同一个实例上?否则,存在在制造装饰图案中没有点,装饰的性质是装饰从外界具体实现,并改变输出,而不会受到其他装饰施加到具体实例。

现在作为当前实现,我觉得@mrhobo是完全正确的,你的抓取功能可能看起来像

public function fetch($limit, $order,$sort) 

一个非常聪明的获取也可以期待用户发送键 - 一个哈希表值,columnname =列值,通过它你可以自己选择查询。