提问人:Eli 提问时间:11/6/2008 最后编辑:Eli 更新时间:11/6/2008 访问量:2492
使用 MVC 的多表模型?
Multiple Table Models with MVC?
问:
我刚刚开始使用 MVC,一旦我设法将我的思维转向它,它似乎将是一个很好的方法。
我遇到的大多数材料似乎在模型、视图和表之间具有 1-1 的关系——即每个模型代表一个表并允许 CRUD,以及更复杂的函数。
如果我有一个帐户模型,它允许创建和更新帐户,该怎么办?
我想使用 /signup 视图和控制器来创建 () 帐户,但想使用 /members/account 视图和控制器来更新、更改 pw 等。
拥有注册模型会更好,还是我可以从多个位置使用我需要的任何模型?
另外,假设一个帐户可以有多个用户,但我想在注册时创建第一个用户。我想将帐户设置和用户创建作为事务运行。我应该有一个帐户模型和用户模型,并同时使用两者,还是只让帐户的 signup create() 函数创建默认用户?
我正在将 PHP 与 CodeIgniter 一起使用
答:
一般来说,您最想做的是将表视为模型下方的附加“层”;MVC 概念通常不会过多地处理支持问题的实现;即,您是否使用数据库表或平面文件存储或内存中数据表示。
我的建议是将问题视为一个问题,即有一个层在表和应用程序之间进行交互;您的“数据对象”层。可以将其视为纯粹的序列化。如果您使用的是对象模型,这将是您的 ORM 层。
然后,您希望有另一层来定义“业务逻辑”;即您的数据与您的数据的交互。这与帐户如何与用户交互等有关。这里的封装基本上负责你的高级交互。通过这种方式,您可以定义对您的业务需求最有意义的抽象,而无需依赖实现;例如,您可以定义一个“用户帐户”模型,该模型将执行处理用户帐户所需的所有操作;定义您希望该抽象执行的所有操作。然后,一旦你把这个抽象记下来,那就是你的模型;然后,您可以在该模型的内部工作中定义如何与持久性代码进行交互。
通过这种方式,您可以从实际的 Model 接口中抽象出 Model 的持久性和实现。因此,您可以将模型定义为执行您希望它执行的操作,而无需考虑底层实现。这样做的好处是显着的;思考你希望你的模型做什么的过程,与它执行它的方式隔离开来,可能非常有指导意义;同样,如果后备数据层发生变化,则模型也不需要更改;例如,您可以使用平面文件进行原型设计。
评论