2013-01-01 74 views
0

嗨,大家好,我对如何在基于Zend Framework的应用程序中使用模块感到困惑 - 从我读过的模块中,应用程序中的应用程序,但是在模块内容和控制器内部可以处理的内容之间的线条模糊不清。例如像在您具有以下特征的家庭预订应用程序:在基于Zend Framework 1的应用程序中设置模块的正确方法

内部管理 率管理 网上预订+预订管理

认为我们有三种类型的用户的管理员用户,客户谁使预订和谁拥有房子的设立登记将如何建立我们的模块即会我们有一些像楼主:

admin 
->controllers 
    ->houseController 
    ->rateController 
    ->bookingController 
    ->customersController 
landlord 
->controllers 
    ->houseController 
    ->rateController 
    ->bookingController 
customer 
->controllers 
    ->bookingController 

,或者它会是这样的:

modules 
->Booking 
->Rate 
->Customers 

后一种格式看起来有点像把控制器变成模块 - 这里的正确方法是什么?

在原始列表中 - 每个模块都有重复的控制器。差别非常小,例如:houseController,例如在管理模块中 - 管理员可以查看所有房东的所有房屋,而房东只能查看他们自己的房屋。从技术上讲,我重复了90%的代码,这似乎并不是正确的做法,因为我不认为可以使用ACL限制可查看的列表。这种逻辑的正确方法是什么?

回答

1

好的。让我们试着回答它...

这是一个经典的优化挑战(关于应用程序架构)。根据你的目标是什么,你会有不同的优化方法。我更喜欢优化应用程序体系结构以实现最终的技术功能如果你需要的模块

  • 管理
  • 房东
  • 客户

功能具有不同的功能范围,让他们分开(这也将简化ACL定义)。

根据您曾经参与过你的问题是什么有一些控制器 “重叠”:

  • houseController
  • rateController
  • bookingController

它们被多次使用。功能明智的是,它们只能在一个模块中使用。如果你不能分开它们,就不需要单独的模块...

希望这可以给你一个关于如何使用模块的概述。

+1

我也可能会推动大部分模型最多应用程序级别,因为它们可能会在所有模块中使用。 –

+0

那么他们似乎重复的原因是因为每个用户都有不同的看法,例如:管理员可以查看所有房主的所有房屋,而房主只能查看自己的房屋。这几乎是这里唯一的区别,看起来有点像矫枉过正,在这里重复了将近90%的控制器和视图。这是处理这种逻辑的正确方法吗? – Ali

+1

只是一个普遍的评论:如果你不得不重复,你的架构还不正确。在这种情况下,你会在模型中处理这个。基于访问权限,你检索更多或更少的数据... – udo

1

它在我看来好像大多数功能将更适合模型。您可能只能使用具有不同视图的属性控制器的默认模块来为客户和所有者提供服务,也许可以为管理员分配一个模块,因为管理员通常具有管理所需的更多功能。

//bare minimum, you may need to add controllers andd models for user/owner objects and rate managment 
/application 
    /controllers 
     /IndexController // default entry to application, login, authentication 
     /ErrorController 
     /PropertyController // actions to view, book and reserve a property object, may provide some extra functions for owners. 
    /modules 
     /admin 
      /IndexController // provides actions for administration activities such as managing user and owners and setting ACL and Authentication. 

这只是我的看法,请记住,ZF1中的模块与ZF2中的模块完全不同。

+0

但我同意,在这个应用程序中,几乎所有类型的用户都具有相似的功能 - 唯一的区别在于访问级别,例如:管理员访问所有数据,而用户只访问他们自己的数据。 – Ali

0

虽然这个问题很老,但我觉得它还没有得到回答。我自己在过去的几天里一直在建立一个电子商务CMS项目,并且学习了来自银光Prism背景的Zend Framework的基础知识。我可以建议的一件事是理解一个模块不需要很小。模块的定义是“一个独立的自包含单元”,因此在您的情况下,您将拥有一个“预订模块”,该模块在完成时应该能够被插入到任何应用程序中,然后通过适当的绑定可以与其他模块。你的布局问题是你依靠模块来分离你不同的访问级别(在答复中你基本上会问“我应该怎么做”),你想要的是使用某种身份验证方法来查看当前用户可以运行特定的操作。关闭你给我们的建议我会建议一个基于角色的认证方法,可能有多个操作(仍然为自己决定这个部分)。

Zend框架

  • 主机一个 “应用程序”,其含有利用MVC模块

模块

  • 独立整装单元可以插入到任何应用程序
  • 可以通过挂钩/接头与应用程序中的其他模块进行通信

MVC

  • 模型:通过验证验证确保数据的完整性
  • 浏览次数:显示模型的数据给用户
  • 控制器:通过操作流程用户输入数据进行编辑,
    • 行动:安全逻辑应该在这里,以确保用户可以使用此操作。

角色

  • 枚举用于认证的

TL; DR 为你的项目,你应该有1个模块,4个控制器,3个角色和授权服务绑定到您的控制器的操作以验证当前用户是否可以运行所述操作。这将防止重复代码,并允许它在没有任何代码重写的情况下被展开。

阅读理解授权的操作: Activity based checks

编辑: 也许应该注意,有什么不对使每一个模块,因为它是可行的,它只是更多的工作,以配合和更多的编码唯一的好处是你可以拉动说预订模块成为一个完全不同的应用程序,而不需要其他2.但从我的理解你只想要1个模块

相关问题