hal*_*erd 4 php oop model-view-controller design-patterns
现在我已经阅读了大量有关OOP,MVC和设计模式的帖子,文章,问题和答案,我仍然对构建我想要构建的内容的最佳方法有疑问.
我的小框架是以MVC方式构建的.它使用smarty作为查看器,我有一个类设置为从url调用的控制器.
现在,我认为我迷失在模型部分.我可能会将模型和类/对象混合到很多(或者很少).
无论如何一个例子.目的是获取驻留在我的数据库中的用户列表:
应用程序由例如"users/list"调用然后控制器运行函数列表,该列表打开类"user"的实例并请求该类从表中检索列表.一旦返回到控制器,控制器通过将结果集(数组)分配给模板并设置模板将其推送到查看器.然后,用户将点击表格中的一行,该行将告诉控制者例如开始"用户/编辑" - 这将反过来创建一个表单并用用户数据填充该表单以供我编辑.
到现在为止还挺好.
现在我将所有这些组合在一个用户类中 - 这样该类将具有函数create,getMeAListOfUsers,update等以及hairType和noseSize等属性.但是正确的oop设计会让我从"getme用户列表"中分离出"用户"(具有登录名,大鼻子,卷发等属性)的东西,感觉更像是"用户管理器类".
如果我要实现一个用户管理器类,那么它应该如何呢?它应该是一个对象(不能真正将它与现实世界的东西进行比较),还是应该是一个只有公共函数的类,以便它或多或少看起来像一组函数.
它应该返回找到的记录数组(例如:array([0]=>array("firstname"=>"dirk", "lastname"=>"diggler"))
或者它应该返回一个对象数组.
所有这一切对我来说仍然有点混乱,我想知道是否有人能给我一些关于如何以最佳方式接近这一点的见解.
处理和数据(业务逻辑)所需的抽象级别取决于您的需求.例如,对于具有事务脚本的应用程序(可能是您的设计的情况),您描述的从数据库中获取和更新数据的类听起来对我有效.
您甚至可以使用表数据网关,行数据网关或活动记录来进一步概括.
如果您觉得在事务脚本中复制了大量代码,则可能需要使用Data Mapper创建自己的域模型.但是,我不会盲目地从一开始就这样做,因为这需要更多的代码才能开始.另外,自己编写Data Mapper但使用现有组件并不明智.Doctrine是PHP中的一个组件.
另一个现有的ORM(对象关系映射器)组件是Propel,它提供Active Records.
如果您只是想快速查询数据库,可能会发现NotORM鼓舞人心.
您可以在列出的模式斜体的
列出了企业应用程序架构模式一书中的所有模式.