【问题标题】:Should models be able to access my searcher class?模型应该能够访问我的搜索器类吗?
【发布时间】:2012-12-14 10:37:15
【问题描述】:

我对我的应用程序结构中的“最佳实践”有一些疑问。我使用瘦模型,并拥有执行大部分(全部)数据库交互的服务层。模型在需要数据库事务时调用服务层。

我还有一个工厂类,它可以返回表单、模型和服务层类。这个工厂类还可能返回一个“搜索”类,它充当一个非常简单的 DBAL,并由我的服务层使用。

这个搜索类有 getAll() 和 getById() 等辅助方法。

我对我的应用程序的哪些部分应该可以访问搜索类有点困惑;目前我的模型在需要通过其 ID 检索实体时使用静态工厂来构建搜索类。我的模型是否应该调用我的服务层来进行此调用,从而无需使用我的工厂类来返回搜索器?

我想我不喜欢我的数据库可能被我的应用程序的多个部分访问的想法,而实际上我宁愿一切都需要首先通过我的服务层。

非常感谢提示和反馈!

【问题讨论】:

    标签: oop model-view-controller


    【解决方案1】:

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

    通过这种方式,您可以与 Searcher 类或工厂保持清晰的分离,这在未来可能会发生变化。另一个好处是,通过在SearchService 中包含所有搜索相关代码,开发人员更容易理解代码,因为他们知道搜索相关代码在SearchService 中,而不是在代码库、调用工厂方法等

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

    这只是我的偏好,而不是这是一种正确/错误的做事方式。

    【讨论】:

    • 我喜欢这个解决方案。我在自己的应用程序中看到这种不同的唯一方法是每个服务层都至少使用基本搜索器类,因为它是 DBAL。我想我可以将搜索服务用作 getAll 和 getById 的单一入口点?
    • 是的,你可以这样做。 ISearchService 将具有与 Searcher 相同的方法。但是由于您将 Searcher 包装在服务类中,因此您有一个很好的抽象,因此您可以在服务中做任何您想做的事情,包括进行 Searcher 调用。这个“任何东西”可以是审计,例如,记下谁进行了搜索以及搜索条件是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多