创建自己的Web框架

时间:2010-01-13 03:57:15

标签: coldfusion frameworks

我是一名冷血程序员,是的,我知道有很多很好的冷血框架。

然而,由于我工作的公司的方式,代码的样式和结构,我想创建一个踏脚石框架,逐渐随着时间的推移将它们转移到一些当前的编码风格和标准..

但要达到目标,我们需要具有一致的业务逻辑和规则的可定制设计..

我需要慢慢将它们分成显示和逻辑......

我对任何火焰战争,使用什么框架等都没有兴趣......

我感兴趣的是,创建自己的Web框架的最重要功能是什么?

以下是我希望解决的一些问题:

  1. 一个适用于开发和生产的调试器/服务器监视器,即使我们正在使用Coldfusion 8 Standard,我们也可以使用cf服务器监视器,但在生产中我们不能。所以我希望包含一些免费或开源的调试器/服务器监视器......

  2. 我希望包含一个良好的跨脚本保护,以便我可以将我们从cfqueryparam移开,并允许我们使用cachedwithin,因为我们的版本在查询中不支持cfqueryparam和缓存。

  3. 能够切换样式,页面和/或更改内容布局......我已经完成了Wordpress的一些工作,并且喜欢它的主题框架,但讨厌它的性能/加载时间。

  4. 请参阅我知道重大公司网站的重做需要很长时间,并且会导致比我们想要的更多错误。

    这就是为什么我想创建一个框架,它在很小的步骤中允许我们保持当前的逻辑/功能,但允许分离显示和逻辑。

    1. 找出我的文件夹/网址结构,让seo有意义,并且是人类可读的,我过去曾与Able Commerce合作,并且讨厌它的网址结构。
    2. 很抱歉这个冗长的问题,我不希望你做我的工作:)但是一些合乎逻辑的建议,关于创建框架的好文章的指示......我用谷歌搜索....

      谢谢。

6 个答案:

答案 0 :(得分:9)

除了强制性的“你使用coldfusion?!?... ha”之外,你去了:

  1. 网址处理,将/ a / b / c转换为对您的应用程序的调用
  2. 输入(GET,POST,PUT,DEL)解析为本机结构
  3. Cookie和会话管理(SQL会话存储/ Dep-inject sessions / pluggable)
  4. 自动服务创建(RESTful / SOAPy)无论
  5. 他们将是我的前4名。然后:

    1. MVC抽象作为核心框架功能(我知道!)
    2. ORM(我讨厌它,但对于小事情来说没关系)
    3. 自动输入验证,GET / POST / DEL
    4. 控件的自动修复
    5. 身份验证机制
    6. 然后如果你感到无聊:

      1. CRM和模板
      2. 当然,让这些东西稳定且可扩展可能不值得重新发明轮子(是的,我已经尝试了,我仍然致力于那个回购)。

        除非你有一些很好的新方法,否则不要打扰。

答案 1 :(得分:3)

我的第一个想法是随着时间的推移而做,几乎不打算创建一个框架。

  • 看看你经常重复的事情 为此构建包装器。
  • 查看您使用的任何模式 并将它们纳入其中。
  • 查看您要使用的任何代码生成。

构建它,然后在许多站点上进行优化。

答案 2 :(得分:3)

我也写了自己的CF框架。这是值得的,因为框架正是我想要的,我想要的,并且非常灵活。这是我的建议:

  • 创建一个UDF库,以便尽可能使用CFScript。
  • 拥有一个调试模板,可以在每个HTML响应的底部打印所有重要数据和查询。我还使用我的调试模板将用户生成的错误通过电子邮件发送给我自己,并附上所有相关的请求,历史记录和查询数据。
  • 有一个函数,可以让你在CFScript中进行查询。具有配套功能以保护字符串免受SQL注入攻击(下面的示例)。
  • 将每个请求划分为区域和路径(例如/ area / path / to / template)。这使您可以根据用户所在站点的位置来执行自定义逻辑。令人惊讶的是,这个位置信息对于自定义网站非常有用。
  • 不要像Mach-ii那样在XML文件中设置网站。只需将模板放在相关位置,然后根据请求从index.cfm加载它们。
  • 在任何使用多行设置代码的页面上,将所有代码放在一个单独的模板中,并将其包含在页面顶部。这意味着您可以将页面提供给图形设计人员,从而降低他们搞砸或迷路的风险。
  • 在每个站点中包含整个框架。尝试将各个站点链接到一个公共框架目录(即通过符号链接,别名或服务调用)很有吸引力,但实际上,您的框架将沿着不同的路径发展,因为客户端需要特定的自定义设置来破坏您的其他站点。
  • 始终将简约放在首位。您不希望破坏环境,以至于您无法包含其他项目的模板(例如WYSIWYG编辑器附带的连接器)。你的经验法则应该是另一个Coldfusion程序员可以在一小时内开始使用你的框架而不需要你的手。
  • 将所有框架变量放入单个结构中,这样就不会使用框架变量污染范围。它还可以帮助其他用户了解框架变量和模板变量之间的区别。我对从页面模板中可见的每个变量(即请求和变量范围)使用fw.scope.varname
  • 使用CFC!我无法告诉你他们在保持你的代码组织方面有多大帮助。我通常在每个请求开始时实例化我的所有CFC,因此我可以使用fw.mycfc.mymethod()
  • 形式从CFScript轻松访问其成员

CFScript SQL函数示例:

sql("SELECT * FROM "#fsafe(this.table)#" WHERE "#fsafe(my.field)#"='#vsafe(my.value)#';", my.cache_mins);

fsafe保护表/字段名称,vsafe保护字符串不受SQL注入(通过转义双引号或单引号)

答案 3 :(得分:1)

为什么你不看那些框架的eh功能集,只是打破你需要的东西来创建你自己的。

答案 4 :(得分:0)

首先,ColdFusion有很多优秀的现有框架。但是,我确实理解自己的愿望。我同意上面的一些陈述,他们谈到了识别对你来说重要的东西,并保持简单。

在一个没有框架的组织中,并试图编写一个并慢慢使其达到标准,准备好慢慢地真正意味着缓慢。采用并不快,因为大型旧应用程序通常有大量现有业务逻辑,很难分离出“关注点”,这当然是大多数框架都做得很好的。我也发现它很有挑战性,因为大多数开发人员实际上忙着做日常工作,没有多少时间学习新东西,特别是在迫在眉睫的最后期限之前。

祝你好运!

答案 5 :(得分:0)

关于#3,Coldfusion的优势之一是自定义标签,它可以很好地用于自定义模板和样式。我将页面选项/属性和内容存储在SQL或Memcached中,然后使用自定义标记将模板合并到内容和选项中。它管理起来快速而简单。

cf_page是一个示例自定义页面,用于抽象html模板,远离内容,js和页面主题。

<cfset page = getPage(cgi.script_name)>
<cf_page title="#page.title#" theme="#page.theme#" pageLayout="[two column]" js="[list of js files to load]" jqueryVer="1.3.2" css="[list of css files to load]">
    Page content, additional custom tags, and/or cfincludes
</cf_page>

*将这个主题分解为更小的子问题会更容易。