【问题标题】:Lithium apps that go beyond CRUD超越 CRUD 的锂应用
【发布时间】:2011-01-12 10:32:22
【问题描述】:

这或多或少是past Stack Overflow question 的以框架为中心的版本,这是关于 MVC 应用程序的大多数介绍性材料倾向于呈现模型、视图和控制器之间的紧密耦合的方式。例如,您将拥有一个由用户控制器修改的用户表,该用户控制器反过来将过滤后的数据推送到用户视图。我的印象是很多 MVC 框架也倾向于反映这种模式。就其本身而言,这一切都很好,但除了使用 HTML 表单构建和显示单调的事物列表之外,它从未真正引导我做任何事情。

现在看到的 MVC 框架是Lithium,作为一个聪明的 PHP5.3 编码技术的案例研究,这似乎很有趣。一方面,Lithium 有一个Model 类,它提供围绕单个表的包装对象,并抽象出一些简单的查询。另一方面,它有一个很好的约定,将 URL 路由到控制器对象上的方法调用,然后渲染到显示模板。

但在此过程中,我发现自己不知道将所有将表 A 中的数据与表 B 到 Z 中的数据相关联的有趣逻辑放在哪里。或者至少,我不确定在哪里以与框架设计一致的方式放置此类逻辑。据我了解,Lithium 的Model 抽象除了消除一些行级插入/更新/删除样板之外并没有做更多的事情,而且控制器/视图架构似乎主要与用户界面有关。我不想将大量业务逻辑放在从 URL 请求接收路由函数调用的同一个 Controller 类中。

我的直觉是用我自己的代码来填补空白,这些代码或多或少完全存在于框架之外。我不确定我是否应该期待更多,但考虑到 Lithium 中其他所有东西的结构非常严格,感觉有点不满意,就像我本可以推出我自己的样板减少代码,而无需花费大量时间来探索源代码一个大框架。

我在这里缺少什么?是否有推荐的架构或理念来使用这种类型的框架?

【问题讨论】:

  • +1 关于无聊话题的有趣问题。对此了解不多,但锂似乎是 PMVC 结构的(模型=数据库),解决方案可能是 use it with an ORM like Doctrine。但也许@NateAbele 可以回答更多。

标签: php model-view-controller lithium


【解决方案1】:

对于 Lithium,您必须记住的一件事是目前还没有生产就绪版本(尽管有些网站正在生产中使用它)。 现在主要缺少的功能是模型关系。有了适当的关系,我假设您的问题将得到部分回答,因为这是创建更复杂应用程序的大局中的重要砖块。 您可以查看应该正在进行关系工作的 x-data 分支。

对于编写域逻辑的第二部分,简单的答案是“在模型中”。 例如,请参阅this (rather useless) example of extending model functionality。 另一个值得关注的例子是开源迷你应用 Analogue,它是少数几个使用中的 Lithium 开放示例之一。 Analogue model class 显示了一个稍微多肉的模型。

最后是连接 M、V 和 C 之间的点的问题。 Lithium 控制器应该主要将工作委托给模型,并在需要时重组输入数据。 拥有 Post 模型、PostsController 和 views/posts/add、index 等的简单示例并不意味着您必须只在其中拥有 Post::all()。 PostsController::view 可能需要加载一组 Comment 模型。

所以你当然会在里面扔很多你自己的代码!否则它不会是一个应用程序。但要保持领域逻辑与模型的自然联系。

  • 需要验证博客文章有 独特的标题?编写一个验证器。
  • 需要确保用户对帖子具有写入权限?覆盖 save 方法并验证它,或过滤它。

但我认为我们需要等待关系落地和 1.0 版本发布,然后才能完全判断如何最好地解决锂中的结构化应用程序。

【讨论】:

  • 我知道你要去哪里,但也许我在考虑逻辑空间,你可以一次修改两个或多个表。正如你所说,这应该与控制器代码隔离,但严格来说,我不相信这样的逻辑也属于 Lithium 的“模型”类。 Model 类有很多方面暗示它是特定于表的——它具有模式、键和 ID 成员,这些成员将其每个实例都集中在一个特定的表周围。那么,我想答案是由应用程序编写者来提供模型和控制器类之间的表间层。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多