我正在使用MVC模块化结构,有点像你可以使用Zend(我不使用Zend)。目录结构如下:
/www
/Config
/Modules
/default
/controllers
indexController.php
loginController.php
/models
/views
blog
/controllers
indexController.php
/models
/views
...
我对这个结构有一些疑问。我的“默认”文件夹中有一个loginController。显然,用户会访问该页面进行登录。
登录后的用户可以在博客上发布内容。但这就是我的问题所在。不同模块如何共享数据,如用户数据?
在这种情况下,“默认”模块也将具有“userModel”。但该博客还显示了“最新用户”列表。所以它需要以某种方式访问“默认”模块中的userModel。
我可以想到更多的例子,某个模块需要来自另一个模块的数据。
但这意味着'模块'在某种程度上几乎总是依赖于另一个模块。所以这就是为什么我在这个结构中看不到任何用处。或者我在这里做错了什么.. ??
答案 0 :(得分:1)
我实际上会重新考虑你在模块中的确切内容。
Model层的结构应该在不同的模块之间共享(同样......你的命名约定很糟糕:模块,模型,模型,模块,模块模型......令人困惑)。这些模块用于打包与交互相关的部分。
当您使用表示“文章”的域业务对象时,逻辑不会在模块之间神奇地改变。相反,每个用户可以使用它做什么只是限制。取决于,是否授权用户执行某些命令。
您可能会因阅读此SO topic而受益..虽然更专注于控制器级别的授权,但相同的想法可以应用于域对象。
另外,你应该仔细阅读M. Fowler关于GUI Architectures的文章。
答案 1 :(得分:0)
似乎'模块'方法是不适合的方法。在MVC中,您只有三个实体:模型视图和控制器。
控制器可以加载任何模型,例如你提到的:post_controller需要 post 和 user 模型,所以就这样吧。因为模型代表数据,所以让两个用户模型做同样的事情是不正确的。
所以我会摆脱模块方法,因为它是一种反模式,你注意到在开始重复所有应用程序的类和/或代码时。