0

所以我正在做一个项目,其目标是从用户那里收集数据以进行搜索。我已经将要从搜索中收集的不同类型的信息建模为对象。我计划创建一种将创建和操作这些对象的管理对象。

我的问题是,在创建这个“管理”对象时我应该考虑任何模式或设计决策吗?想到的一件事是这个对象将与“搜索数据”对象紧密耦合,因为它可能会在它的方法中创建和保存它们。

我不认为依赖注入在这种情况下会起作用,因为可能必须处理同一对象的多个副本,因此不可能知道参数列表是什么。

感谢您的见解。

4

2 回答 2

1

我认为最好为所有这些其他对象或子对象创建一个父类或模式以遵循或继承。例如,假设您想要获取或设置特定对象中的一些数据。如果数据字段名称不同,您就会遇到问题。

假设您有一个名为的对象GoogleSearch和一个名为 的对象YahooSearchGoogleSearch如果可以通过该方法检索用户输入的查询,并且必须$google->getQuery()使用 YahooSearch 查询来检索,$yahoo->getInput()那么显然您会遇到问题,除非您想在出现时手动指定此类信息。

但是,如果您在开发框架之前考虑这样的事情,那么自动化一切会变得容易得多。在这种情况下,可以肯定地说,如果您正在从用户搜索中构建数据集合,那么所有搜索都将共享一些属性。

例如, - 他们使用什么搜索引擎?- 输入的查询是什么?- 搜索是什么时候进行的?- 从什么IP?- 用户是否选择了其中一个结果?- 用户是否在计算机、移动设备或其他设备上进行搜索?

考虑到这些最小的考虑,我们可以设计一个系统来整合所有这些属性。例如,这可能是您的父类:

class Search {
    protected $engine, $query, $when, $who, $browserType;
    function __construct() {
        $this->when = time();
        $this->browserType = $_SERVER['HTTP_USER_AGENT'];
        $this->who = $_SERVER['REMOTE_ADDR'];
    // some more class methods
    }
}

那么您可以从此类继承以创建特定的搜索类型,如下所示:

class GoogleSearch extends Search {
    function __construct() {
        // set the engine to Google
        $this->engine = 'Google';
    }
}

还有一些需要考虑的事情可能是变量的范围或可见性。在这里,我将它们声明为protected基本上意味着它们是私有的,但可以被子类或扩展类访问。希望这会有所帮助,如果您有任何其他问题或我不明白您的问题,请告诉我,我会尽力提供帮助。

于 2013-03-28T12:58:05.920 回答
0

我建议在这里查看创建模式列表http://en.wikipedia.org/wiki/Software_design_pattern

抽象工厂、构建器、工厂方法都可能适用于您正在寻找的东西。依赖注入不是您所要求的适当概念。DI 使在运行时连接事物和删除依赖项的硬编码变得更加容易。真的不是一回事。

于 2013-03-28T12:47:35.757 回答