2012-12-14 49 views
1

我在应用程序结构中有几个关于“最佳实践”的问题。我利用了瘦身模式,并且拥有完成大部分(全部)数据库交互的服务层。模型在需要数据库事务时调用服务层。模型应该能够访问我的搜索者类吗?

我也有一个工厂类可以返回的形式,模型和服务层的类。这个工厂类也可以返回一个“搜索”类,它充当了一个非常简单的DBAL,并被我的服务层使用。

该搜索类有辅助方法如GETALL()和getById()。

我稍微混淆有关的我的应用程序的部分应该有机会获得搜索类;目前我的模型使用静态工厂来构建搜索类,当它需要通过它的ID检索实体时。我的模型是否应该调用我的服务层来进行此调用,从而否定使用我的工厂类返回搜索者的需求?

我想我不喜欢我的数据库可能会从我的应用程序的多个部分,当我真的宁愿一切都需要经过我的服务层首先访问的想法。

提示和反馈非常感谢!

回答

1

我将最终创建SearchService(它实现一个接口即ISearchService)类的模型,或任何其他代码,即要访问Searcher将与交互。

这使得你可以从Searcher类,或工厂,这可能会改变未来的明确分离。另一个好处是,通过使所有与搜索相关的代码位于SearchService中,开发人员更容易理解代码,因为他们知道搜索相关的代码位于SearchService中,而不是围绕代码库,因此调用工厂方法等。

另外,通过使用ISearchService,您可以选择使用依赖注入,这是让对象为您初始化的好方法,而不必担心实现更改。

这只是我的喜好,虽然,而不是这是一个正确/错误的方法做事情。

+0

我喜欢这个解决方案。在我的应用程序中,我可以看到这种差异的唯一方法是每个服务层至少使用基本的搜索器类,因为它是DBAL。我想我可以利用搜索服务作为getAll和getById的单一入口点? – James

+0

是的,你可以做到这一点。 ISearchService将具有可能与Searcher相同的方法。但是因为你将Searcher包装在一个服务类中,所以你有一个很好的抽象,所以在服务中你可以做任何你想做的事情,包括让Searcher调用。例如,这个“任何事情”可能是审计,记录下谁搜索了搜索条件,搜索条件是什么。 –

相关问题