为清楚起见考虑一个相当标准的“用户注册”功能:MVC和ORM - 哪个模型逻辑去哪里?
我的ORM(波轮)允许您更改类ormUser,它扩展了ormUserBase,以引入自定义功能。
现在我已经将Propel与MVC框架耦合在一起了,我想知道从最佳实践的角度出发,应该采用哪种逻辑。
对于我的用户注册功能我想创建:
这个RegistrationController - 它使用
的usermodel - 这反过来应该调用类似
- LoginView
- LogoutView
- SignupView
- ProfileView
的用户数据库表加上用户概况,推动已产生的便利方法与这些表来工作。但是现在Propel的标准方法还不够,我需要扩展功能。
哪里可以正确地做到这一点?
请问我只延长ormUser新查询的方法,并把非查询逻辑在我的usermodel? 或者你会简单地忽略ormUser和使用的usermodel的一切习惯,根据需要为我的逻辑调用其它ormTableNameClass -s呢?
我知道在Propel中保留新方法在其他模型和控制器中具有可重用性的好处,但我不确定从“做得正确”的角度来看,因为它似乎需要业务逻辑来确定结果某些查询。
UPDATE:Using ORM classes directly from the controller in MVC, bad practice?展示了如何一个通常与行走,它在我的脑海里重叠架构的模型......
这取决于你想添加的功能类型。你能给个例子吗? –
当然 - 说我想创建一个公开的“显示用户配置文件的字母”视图。我需要分页逻辑和多个查询,其中大部分都是Propel原生的,但是让我们假设它们没有被完全覆盖。假设我在查询本身中需要与数据库不相关的逻辑。 我将在Propel中创建一个方法,该方法接受分页的参数,从我的模型执行此方法并正在工作,还是我会在我的模型中完成所有工作? – MattW
在这种情况下,控制器应检索按字母顺序排列的用户模型列表,并将该列表传递给视图。该视图然后构建用户配置文件的实际列表的HTML输出。我不知道Propel是如何工作的,但不应该将检索逻辑添加到用户模型中。理想情况下,您将创建一些与Propel交互的用户存储库类,并且该类将负责从数据库中检索用户对象。 –