创建一个将默认搜索条件作为构造函数参数的存储库是否有意义?

时间:2010-02-24 12:30:22

标签: language-agnostic design-patterns constructor repository-pattern

我正在重构我建立的网站。这是一个旅行社的网站。我正在考虑实现存储库模式。

旅行社有两个部门,有自己的网站,针对不同的客户群。然而,两个网站的后端是相同的。它们都访问相同的DB表。有些表只有列,用于标识记录的分区。

让我们想象一下,我想建立一个能够返回Trip对象的TripRepository。您觉得创建一个将Division作为构造函数参数的Repository是否有意义?所有结果都只适用于该部门?

换句话说,在伪代码中:

class TripRepository
{
    method constructor( Devision );

    // this will then only return Trips for the Devision passed to the constructor
    method findAllTrips( /* some other criteria */ );
}

我当然可以将它作为一个可选的构造函数参数,如果需要的话,甚至可以设置一个setter来切换Devisions ......但是一般来说这样做会有什么异议吗?

或者我应该总是将Devision标准传递给所有搜索方法吗?

1 个答案:

答案 0 :(得分:1)

除非你的findAllTrips(...)方法基于“Devision”具有完全不同的逻辑(不应该是Division,顺便说一句?),没有理由创建单独的实例。即使你出于某种原因,我认为你必须将实例化的对象放在其他集合中,在那里使用它们来访问它们... Devision作为一个键(即参数)。

所以我个人认为这不是一个好的设计决定:看起来并不直观,未来在你的代码中遇到这个问题的人可能会想到走这条路的真正动机是什么。