Umbraco应用程序的体系结构

Umbraco应用程序的体系结构,umbraco,Umbraco,我是Umbraco的新手,我看过Umbraco.tv视频,希望在项目中使用Umbraco作为内容管理和编辑的cms。我非常感谢您的指导、时间和对3个问题的思考: 基于Umbraco的数据驱动项目应如何构建?对于自定义数据库表,您是使用单独的数据库还是使用相同的Umbraco数据库 如何处理自定义数据(非内容)?您是否将所有内容都设置为文档类型,即使是您不打算创建内容的数据,例如简单表单提交的数据 对于DAL,您使用什么技术或ORM?Umbraco是否提供用于保存非内容或文档类型的简单数据的API

我是Umbraco的新手,我看过Umbraco.tv视频,希望在项目中使用Umbraco作为内容管理和编辑的cms。我非常感谢您的指导、时间和对3个问题的思考:

  • 基于Umbraco的数据驱动项目应如何构建?对于自定义数据库表,您是使用单独的数据库还是使用相同的Umbraco数据库

  • 如何处理自定义数据(非内容)?您是否将所有内容都设置为文档类型,即使是您不打算创建内容的数据,例如简单表单提交的数据

  • 对于DAL,您使用什么技术或ORM?Umbraco是否提供用于保存非内容或文档类型的简单数据的API

  • 再次非常感谢你

    • 在Umbraco中始终需要doctype,即使页面不提供任何所见即所得类型的可编辑性
    • 我建议使用面向服务的体系结构,您放入Umbraco的.dll可以调用该服务。然后,您可以部署此服务并完全控制数据访问的方式。选择你想要的任何方法。大多数现代网站都使用ORM,不管是哪种,尽管nHIbernate和实体框架是最受欢迎的。不过,不要害怕混合和匹配更直接的数据访问形式,因为它可以为您提供更多的控制,特别是在大型查询的性能优化非常重要的情况下
  • 如果您不熟悉将自定义.NET功能添加到Umbraco中,尝试将.NET用户控件添加到Umbraco将为您提供一个良好的开端,并帮助您了解如何在Umbraco中使用自己的.dll:

  • 对于未在Umbraco中使用的表,可以使用包含Umbraco表的数据库。如果使用多个数据库时没有托管问题,那么您可以简单地链接到web.config中的第二个数据库-这比使用默认的Umbraco数据库更安全,因为Umbraco软件包经常添加数据库表&可能存在命名冲突

  • 查看非Umbraco数据(如从数据库)的最佳方法是添加使用标准.Net模式访问数据的宏(如razor脚本、.Net用户控件),然后在Umbraco中添加对模板(视图)中宏的引用。您可以对任何文档类型使用多个模板(视图);因此,如果一个名为“表单”的文档类型不包含任何数据,则可以使用“允许的模板”复选框来说明哪些视图对此文档类型有效。添加内容项时,必须在开始时指定文档类型,但模板(视图)可以随时更改

  • 如果您正在存储数据,任何.NETORM都将与Umbraco一起使用(请参阅),我以前使用过LINQtoSQL、亚音速和简洁,但是有很多选择


  • 1架构问题很重要,但也必须根据项目的复杂程度来考虑

    我通常会建议为非Umbraco数据建立一个单独的数据库,因为这样可以使所有数据保持良好的独立性和可管理性,尤其是随着项目的增长。这也意味着CMS特定数据(即内容)可以与非CMS数据分开保存,例如用户注册

    但是,如果项目很小,而且不太可能增长,请保持简单。使用相同的数据库并借助Umbraco对Petapoco ORM的实现。例如:

    ApplicationContext.DatabaseContext.Database.Save(newthing())

    var item=ApplicationContext.DatabaseContext.Database.Single(thingId)

    2对于自定义数据,这同样是一个需要、可维护性和简单性的问题。仅对CMS中需要存储和可以存储的内容使用文档类型。我个人的规则是,如果它不是内容或组织内容,那么它就不属于CMS。例如,新闻和新闻类别显然属于CMS。但是,对文章的评论没有理由在CMS中删除

    3关于DAL,正如我所说的,Umbraco有一个可开箱即用的Petapoco实现。如果项目足够基本,就使用它。除非您需要一些分离和/或额外的咕噜声,否则使用其他任何东西都没有什么意义。在这种情况下,我建议使用NHibernate或EF

    除上述各点外,

    • 使用NuGet
    • 使用Umbraco的MVC模式,因为它将为您提供更大的灵活性。查看,因为它为健壮灵活的项目架构提供了一个非常好的起点
  • 我将任何自定义内容放在与我的Umbraco安装相同的数据库中,但所有内容都放在自定义表中。我不想碰Umbraco标签,我不想影响我未来的版本更新
  • 表单提交的数据存储在我自己的自定义表中,我避免使用这些数据创建内容节点,这通常很棘手,并且不能提供我经常需要的灵活性。相反,我要做的是创建一个“Admin”文档类型,它位于登录之后(硬编码访问,但如果需要,可以轻松连接到Umbraco用户/成员),并使用我自己的自定义用户界面来显示存储的自定义数据
  • 我使用PetaPoto(),它是一个通过单个文件添加的微型ORM(安装非常简单),使用相同的db连接字符串。然后,我根据需要使用MVC的一部分创建自定义模型。我通常远离路线劫持,而是使用Surface控制器和ajax调用处理几乎所有事情

  • 希望这有帮助

    看看我在洋葱架构中使用umbraco的示例


    谢谢@Digbyswift,你能解释一下“除非你需要一些分离和/或额外的呼噜声,否则使用其他东西没有什么意义,在这种情况下,我建议使用NHibernate或EF。