我的服务层应该是无国籍的吗?

时间:2011-11-22 16:25:01

标签: architecture repository service-layer

我有一个服务层,它执行我的控制器和我的域模型之间的关系(即:存储库,实体等)。

在我的服务中,我有一个“获取”实体的方法,比如getArticles,但我需要返回一个数组结果或一个对象集合。

所以我在我的方法getArticles($array = false);中添加了一个参数(实际上我的服务没有转换任何对象,它是由存储库完成的,但我需要为我的API提供该选项)

我的服务越来越大,我想知道在我的方法参数中定义它是否是一个好主意,我认为这是因为我认为我的服务应该是无状态的,但我想知道它是否会最好在我的服务中有一个方法,它基本上做setUseArray($flag)并在我的服务代理它时用我的存储库提供。

同样的想法,如果我使用我的服务来返回分页结果,我应该在每个方法中设置页面和项目计数,还是应该在我的服务中使用全局方法来做到这一点?

有任何反馈吗?

1 个答案:

答案 0 :(得分:1)

像往常一样,这取决于。主要取决于是否同时使用服务对象。通常,使用参数传递所有内容似乎更灵活。将方法参数包装到request实体中将避免客户端与方法签名紧密耦合:

class request { 
    bool getArrayInsteadOfCollection;
    int pageNumber;
    int itemsPerPage;
}        

我假设您有一个Web应用程序,服务对象只存在于请求上下文中。在这种情况下,您可以安全地选择以服务对象的方式制作“重复”参数。看起来也不错 -

getArticles(filterParam) {
    //combine function and service-object-level parameters.
    repository.load(fitler = filterParam, itemsPerPage = this.itemsPerPage...)
}

在我看来,由于灵活性和副作用最小化,传递参数更为可取。