Sar*_*raz 8 php design-patterns web-applications content-management-system
我从客户那里得到了一个新任务,它基本上是为演员/歌手等创建一个CMS,客户将向他们出售.
它基本上是一个包,并且开箱即用,与WordPress非常相似,你只需交给购买它的人,但当然这不会是一个博客平台.它将允许开发人员:
我认为观察者模式可能有用,但我不确定.你们可以建议在以下方面创建这样灵活/可扩展的CMS:
Cha*_*les 19
观察者很好,但你必须考虑超越基本模式.规范的Observer/Subject模式只将Subject对象发送给Observer,没有其他任何内容,甚至不会通知它的原因.
最初,解决方案似乎也包括向Observer发送通知的原因,但最终您可能会通知不关心某些通知的Observers.更好的解决方案可能是要求观察者也要求他们希望收到的通知列表.
但这也是一个问题.为了使观察者实际上将自己附加到主体,他们必须被实例化.每一次.即使他们永远不需要.那太傻了.
因此,我们很快就达到了插件的规范PHP实现之一:"hooks".钩子使用与观察者/主体相同的概念,但实施方式在一个非常重要的方面是不同的:实际的观察者不是为了观察主体而实例化的.相反,Subjects会向各种中央存储库发送通知.此存储库配置了所有已安装和激活的插件(观察者)的列表,并包含每个插件想要接收的所有事件的列表.每个插件仅在事件发生时通知,通常通过静态方法而不是通过创建插件的实例并通知它. call_user_func_array
一个好的自动加载器使这个令人难以置信的微不足道.
因此,您可以为要实现的所有插件创建一个简单的接口.您需要的方法包括但不限于:
根据您采用插件概念的程度,您最终可能会得到具有用户可配置选项的插件.您可能需要考虑到这一点.沿着这条道路走下去的是疯狂和配置系统.
为了使有效的插件,你将需要把钩子无处不在,并经常与最终用户的合作,以增加需要的地方去新的挂钩.
窗口小部件可以轻松地以类似的方式工作,就像在页面呈现之前调用的插件一样.
主题/模板,哦,我的.你可能有两个很大的选择.
此决定将由您的最终用户推动.Smarty具有令人难以置信的限制,但如果您想确保只有经批准的代码在模板中运行,那么它可能是一个可行的选择.此外,允许在应用程序本身中编辑Smarty模板并不安全.
另一方面,Wordpress模板运行良好的原因之一是它们是纯PHP.他们可以调用Wordpress API中公开的任何方法,甚至可以使用自己有趣的逻辑.如果您希望您的最终用户具有技术头脑,或至少技术能力,那么PHP模板就是您的选择.另一方面,如果恶意用户进入管理位,允许在应用程序中编辑PHP模板可能会带来巨大的潜在安全漏洞.您可能希望限制编辑到文件系统.
虽然这包括HTML创建,但您还应该考虑CSS.您的最终用户是否能够直接操作CSS?他们想要吗?如果你的默认模板包含足够的语义类,如果他们知道他们正在做什么,他们可能会做很多样式而不需要很多努力.另一方面,你的最终用户可能不知道CSS是什么,所以他们可能想要,比如说,颜色选择器和预先构建的颜色方案,颜色方案选择器,以及其他如此烦人的东西.现在最好考虑那些恐怖事件.
杂事.
没有草稿和发布状态的概念,没有CMS是完整的.我在这里没有任何建议,除了先编码.如果您的客户或最终用户想要任何类型的历史存档,管理批准机制或其他任何使草稿/发布除了简单的状态字段之外的东西,您需要很快知道.(我被这个人苦涩地咬了一下.我们围绕一个简单的已发布/未发布的模型设计了整个系统,并且当我们意识到它不起作用时,通过规范构建和相关原型代码得到了大约9/10我们必须做一些远远更复杂的事情才能真正满足客户的要求.重建粗略计划是迄今为止我们遇到的单个最大的时间汇.)
你会用ORM吗?如果没有,请确保使用正确的数据库接口库.PDO,或者可能来自PEAR,或Zend_Db.您将不可避免地有一个客户坚持要求代码在Oracle或MSSQL上运行.或SQLite.告诉他们可以做到(通过一些努力)会很高兴.插件作者也会感谢你的理智. 不要自己动手.
(再说一次,有了你的代表级别,我希望你已经熟悉了我所说的几乎所有内容.啊,我在考虑自己的编码问题时会做些什么来分散注意力......)
归档时间: |
|
查看次数: |
3258 次 |
最近记录: |