像 Fractal 这样的图书馆属于哪里?
where does a library like Fractal belong?
我今天正在研究 Fractal(tldr:数据 object/collection 到 json 格式化库)并发现了使用它的一些好处。然而,它的功能似乎跨越了我正在处理的应用程序的多个层次。于是出现了一个问题——使用Fractal的代码属于哪里?模型、服务、控制器,还是其他地方?项目文档文档中给出的示例似乎倾向于将其放在控制器中或直接放在路由回调中(更复杂的示例似乎来自 Laravel 应用程序,作者在他的书中提到了 API).
我担心的是耦合——如果我把它放在控制器中,就像大多数使用示例所显示的那样,那么我以后就很容易受它的约束。我的第一直觉是将其抽象一点,将抽象绑定到合同上,然后将其投入使用。听起来可能设计过度了,但是 API 我正在努力使 "is aspiring" 与 JSON-API 兼容,因此将这样的 "json formatter" 换成其他东西听起来不那么疯狂。此外,我仍然需要格式化错误消息,而 Fractal 似乎根本不会触及它。
我想利用对 Eloquent 的分页器和嵌入式资源的支持,因为这总是很痛苦。只有这样做才会使 presentation/control 层变得尴尬(至少可以说)。即使在 Fractal 文档中,他们也会向控制器 class 添加一些额外的方法来准备 Fractal 对象。这对我来说似乎有点奇怪,但也许它只是我。这就是为什么把它带到这里。
我知道这可能是一个偏好问题,但我希望有人能提供一个听起来合理的 :)。或者也许是一个更好的解决方案,请记住自动化和 json-api
合规性是关键原因。
我用 API class 为我的应用程序需要与之交互的专有系统做过一次。 API returned 对象看起来很像模型,所以我为我需要的对象实现了一些 classes 并实现了一个库来进行 API 调用和 return 个对象。幸运的是,我只需要 API 的读取权限,所以我的库只实现了可用操作的一小部分。
也许您可以将您需要的所有功能(包括 Fractal 和任何 Eloquent 功能)抽象到您已为其定义接口的库 class 中。这样所有的 Fractal 代码都在一个地方,如果你需要替换它,你只需重写你的自定义库 class你的代码)。
我今天正在研究 Fractal(tldr:数据 object/collection 到 json 格式化库)并发现了使用它的一些好处。然而,它的功能似乎跨越了我正在处理的应用程序的多个层次。于是出现了一个问题——使用Fractal的代码属于哪里?模型、服务、控制器,还是其他地方?项目文档文档中给出的示例似乎倾向于将其放在控制器中或直接放在路由回调中(更复杂的示例似乎来自 Laravel 应用程序,作者在他的书中提到了 API).
我担心的是耦合——如果我把它放在控制器中,就像大多数使用示例所显示的那样,那么我以后就很容易受它的约束。我的第一直觉是将其抽象一点,将抽象绑定到合同上,然后将其投入使用。听起来可能设计过度了,但是 API 我正在努力使 "is aspiring" 与 JSON-API 兼容,因此将这样的 "json formatter" 换成其他东西听起来不那么疯狂。此外,我仍然需要格式化错误消息,而 Fractal 似乎根本不会触及它。
我想利用对 Eloquent 的分页器和嵌入式资源的支持,因为这总是很痛苦。只有这样做才会使 presentation/control 层变得尴尬(至少可以说)。即使在 Fractal 文档中,他们也会向控制器 class 添加一些额外的方法来准备 Fractal 对象。这对我来说似乎有点奇怪,但也许它只是我。这就是为什么把它带到这里。
我知道这可能是一个偏好问题,但我希望有人能提供一个听起来合理的 :)。或者也许是一个更好的解决方案,请记住自动化和 json-api
合规性是关键原因。
我用 API class 为我的应用程序需要与之交互的专有系统做过一次。 API returned 对象看起来很像模型,所以我为我需要的对象实现了一些 classes 并实现了一个库来进行 API 调用和 return 个对象。幸运的是,我只需要 API 的读取权限,所以我的库只实现了可用操作的一小部分。
也许您可以将您需要的所有功能(包括 Fractal 和任何 Eloquent 功能)抽象到您已为其定义接口的库 class 中。这样所有的 Fractal 代码都在一个地方,如果你需要替换它,你只需重写你的自定义库 class你的代码)。