【问题标题】:where does a library like Fractal belong?像 Fractal 这样的库属于哪里?
【发布时间】:2015-12-15 23:00:13
【问题描述】:

我今天正在研究Fractal(tldr:数据对象/集合到 json 格式库),并看到了使用它的一些好处。然而,它的功能似乎跨越了我正在开发的应用程序的多个层。因此出现了一个问题——使用分形的代码属于哪里?模型、服务、控制器,还是其他地方?项目文档中的文档中给出的示例似乎更倾向于将其放在控制器中或路由回调中(更复杂的示例似乎来自 Laravel 应用程序,作者在他的 API 书中提到了它)。

我关心的是耦合——如果我把它放在控制器中,正如大多数使用示例所显示的那样,那么我将来几乎会受到它的约束。我的第一个直觉是将它抽象一点,将抽象绑定到合同上,然后使用它。可能听起来过度设计,但我正在开发的 API“渴望”符合JSON-API,因此将这样的“json 格式化程序”换成其他东西听起来不那么疯狂。此外,我仍然需要格式化错误消息,而 Fractal 似乎根本无法触及它。

我想利用对 Eloquent 分页器和嵌入式资源的支持,因为这总是很痛苦。只有这样做才会在表示/控制层变得尴尬(至少可以说)。即使在 Fractal 文档中,他们也会向控制器类添加一些额外的方法来准备 Fractal 对象。这对我来说似乎有点奇怪,但也许这只是我。这就是为什么把它带到这里。

我知道这可能是一个偏好问题,但我指望有人有一个合理的声音:)。或者也许是一个更好的解决方案,请记住自动化和json-api 合规性是关键原因。

【问题讨论】:

    标签: api architecture laravel-5.1


    【解决方案1】:

    我曾经为我的应用程序需要与之交互的专有系统使用 API 类。 API 返回的对象看起来很像模型,所以我为我需要的对象实现了许多类,并实现了一个库来进行 API 调用并返回对象。幸运的是,我只需要对 API 的读取权限,因此我的库只实现了可用操作的一小部分。

    也许您可以将您需要的所有功能(包括 Fractal 和任何 Eloquent 功能)抽象到您已为其定义接口的库类中。这样,所有 Fractal 代码都在一个地方,如果您需要替换它,您只需重写您的自定义库类(这可能需要大量工作,但可能比寻找散布在您的代码中的 Fractal 引用更好)。

    【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多