我正在使用 PHP MVC 框架(Yii,但我的问题可能适用于大多数 MVC 框架)来创建一个应该包含 Web 应用程序(网站)和 RESTful Web 服务的项目。我正面临如何在逻辑上分离应用程序和服务逻辑的早期设计决策。以下是一些真实的事实:
- Web 应用程序和 Web 服务将共享许多功能,并且仅在呈现格式(
View
与 JSON)上有所不同... - ...但是,Web 应用程序和 Web 服务将具有一些独特的功能(即,Web 应用程序会做一些服务不会做的事情,反之亦然)
以下是我的愿望:
- 我想尽可能地分享通用功能的实现
- 我不希望
Controller
由于结合了 Web 服务/Web 应用程序逻辑而变得笨拙 - 我对创建单独的 Web 服务和 Web 应用程序控制器有点
Action
反感,尤其是当它们在s 中重叠时(除了呈现的格式) - 除非确实是必要的设计决策,否则我不希望网站使用 Web 服务;我将失去许多使用数据库接口的内置功能和/或必须
IDataSource
通过将其连接到 Web 服务来创建符合可用和其他此类接口的类;也可能会有轻微的性能下降。
我考虑了一下,并在下面提出了一些解决方案。请让我知道您认为哪些可以满足我的需求,或者如果我的需求不合理/适得其反,请告诉我。
WebApp
为和实现完全独立的控制器WebService
(将两者模块化,使它们不共享代码)WebApp
为and实现单独的控制器WebService
,但创建完成繁重工作的方法并调用这些方法来共享实现 - 例如,如果我想做 aitem/findBySomeCrazyCriteria
我会根据 URL 路由到适当的控制器,但每个控制器都会引用一些FindItemsBySomeCrazyCriteriaFunction()
定义的别处。- 让 Web 应用程序使用 Web 服务(这需要我扩展服务的计划功能)
- 为两者实现一个控制器
WebApp
和WebService
,它从一个BaseController
包含用于REST
类型东西的通用钩子的扩展,并在必要时使用覆盖 - 还要别的吗
虽然我的问题与 Yii 有关,但我觉得这在过去对许多开发人员来说一定是有过的。我想知道你做了什么/你建议继续前进。我担心如果我选择了错误的方法,我会“破坏 MVC”或者以后会后悔。