Sitecore项目的最佳实践

14

我对Sitecore相对较新,希望了解一个新项目的常规方法。因此,我愿意倾听并尝试一些经验丰富的Sitecore开发人员的解决方案。我有很多问题,但不会全部问出来。我只是非常好奇其他人的方法。
开始Sitecore项目的最佳方法是什么?如何设置您的项目?在将来的项目中重复使用代码的方法是什么?
简而言之:如果您曾经使用过或正在处理Sitecore项目,请分享您的经验,并向其他人推荐如何使用Sitecore。
目前,我们正忙于构建可以在其他项目中重用的Sitecore块,但我确信有1001个方便的技巧和窍门。我希望在stackoverflow上有一些Sitecore专家可以提供帮助。

3
订阅这个RSS源,它是Sitecore的宝藏: http://pipes.yahoo.com/pipes/pipe.run?_id=ZsFOz4a62xG9Py3Idbq02Q&_render=rss - Steve Green
4个回答

9

以下是一些基于我们的做法的一般设置信息。

Subversion 这不是Sitecore特定的,但我们设置我们的存储库如下:

  • 分支 - 用于处理可能需要一段时间的网站大更新。例如,如果我想要更新网站上所有侧边栏的工作方式,并且这需要几周的时间来完成。我们所做的是创建一个新的分支,并为此dev分支设置另一个sitecore实例并进行必要的操作。完成后,我们将其合并回主干以进行测试和部署。
  • 标签 - 用于保留永远不会合并回主干的代码副本(与分支之间的区别),因此例如当我们部署网站更新时,我们可以创建该代码的标记,以便在必要时返回它。
  • 主干 - 活动代码,此处检入的任何内容应始终可部署。

主干 这是我们正在积极开发/修复错误的地方,具体取决于我们所在项目的哪个部分。我们将其设置如下(例如,项目名为TheProject)

我们将解决方案文件保留在此文件夹的根目录中,这将引用src文件夹中的各种库以及网站文件夹中的web项目。

  • 文档 - 放置有关网站的文档的地方。我强烈建议在完成功能/部分时,编写有关其工作所需任何特殊知识的简要指南。例如,假设我正在处理着陆页面上的特色内容框。此框将自动提取一些内容,除非明确覆盖。当我完成此类操作时,我会为客户编写指南,使用许多屏幕截图。我将指南发送给客户,并将其放在文档文件夹中。这既有助于客户培训其员工,又有助于新开发人员快速了解事情是如何完成的。
  • lib - 这是我们保存需要在项目中引用的任何DLL的地方。
  • 测试 - 放置单元测试的地方。
  • src - 这是我们保留项目特定库代码的地方。因此,在此处,我们将有一个名为TheProject.Library的文件夹,在其中将是visual studio项目。
  • web/Website - 这是我们安装Sitecore并且是网站根目录的位置。在这里,我们有一个名为TheProject.Web之类的项目。在该项目中,我们添加所有一般的东西,如web.config/layouts文件夹等。

Sitecore通用代码库 从一开始就建立一个通用的Sitecore库,并随着时间的推移不断添加内容,这是你可以做的最好的事情之一。然后,当你为项目编写任何代码时,如果该代码不仅适用于该项目,还可以将其添加到此处。这似乎很明显,但从长远来看,这确实会有所帮助。你最终会得到更加稳定的代码,参见链接文本

因此,当我们完成所有这些工作后,我们将拥有类似于以下的解决方案/项目结构

TheProject(解决方案)

  • TheProject.Library
  • TheProject.Web
  • MyCompany.SitecoreLibrary(我们的通用Sitecore库)

工具 这是另一个通用的东西,但我发现它可以真正帮助加快Sitecore开发速度。如果你发现自己在Sitecore中反复做同样的事情,请使用API编写一个工具来代替你完成。这不仅有助于解决你正在解决的任何问题,还有助于让你更熟悉API。

Resharper 这更像是一个通用的.NET开发建议,使用Resharper(http://www.jetbrains.com/resharper/index.html)。我有点像是Resharper的忠实粉丝,它使得开发中许多事情变得更加容易和快速。在我看来,最大的优势是它使重构代码变得非常容易,而随着时间的推移,保持代码清晰易懂非常重要。

希望这些内容对你有所帮助。

Gabe


8
这是一个相当大的问题,以下是我的一些想法: 开发环境 首先,在开始新项目时,我会在我的开发环境上安装Sitecore,并确保所有功能正常。无论是在安装过程中还是之后,我都会将数据库放在单独的SQL服务器上,并相应地更改连接字符串。
然后我打开Visual Studio并创建一个解决方案,包括所需的文件。我创建某种HelloWorld渲染并尝试构建解决方案,以便可以验证所有功能是否正常运行。
当所有内容都正常运行时,我会创建整个解决方案的zip文件,包括数据文件夹。现在是将其添加到某种版本控制系统的时候了,在我的情况下是Subversion。
我将zip文件添加到Subversion中,并添加所有我认为在项目中会更改的文件,通常我告诉Subversion忽略sitecore文件夹,这样在检查文件时可以大大加快性能。
提交操作后,我的项目的其他团队成员可以检出代码并开始开发(当然要先解压缩zip文件)。
我们所有人都朝着同一个数据库工作,虽然这与Sitecore的建议相违背,但我们使用这种方法还没有遇到任何问题,不过由一个开发人员在GUI中创建/更改的项目需要一些时间才能被其他人创建/更改。
当然,我们可以使用同一个Sitecore安装开发多个不同的项目,但由于几乎所有客户都使用不同版本的Sitecore,我们发现这种方法有点麻烦。
通常,我们会设置自动构建服务器,但这是另一个问题。 可重用代码和渲染 我希望能够说我们基于相同的代码库创建整洁的包,以便在项目之间重复使用,但不幸的是我们还没有那么做。今天,在解决方案之间进行大量的剪切和粘贴。 上传代码到客户端 这是通过Sitecore包完成的,通常具有某种动态选择以包括哪些文件,例如在特定文件夹中更改了最近5天内的所有ascx文件。
就是这样。

1
zip文件是为了能够在新的开发环境上从svn中设置Sitecore。由于Sitecore包含超过30k个文件,因此每次在svn上执行提交时检查所有这些文件将需要相当长的时间。我们不时对未通过svn进行版本控制的文件进行更改,如果是这样,我们也会更新zip文件。 - Zooking
因为我的上面的评论,Sitecore 由超过 30000 个文件组成,使每次检入变得非常缓慢。 - Zooking
1
实际上,为了将特定的Sitecore项放入源代码控制中,您可以使用Sitecore内置的序列化功能。 - Ben Sewards
@BenSewards 是的,如果你没有使用TDS,我认为序列化是今天实现它的方法。为了自我辩护,这是在序列化还很新的时候写的,当时我不知道它。 :-) - Zooking
1
今天我们还可以使用PowerShell与Sitecore一起使用,以进一步增强自动化构建过程。 - Zooking
显示剩余3条评论

3

看看这个系列

特别是组件架构部分,增加了我们的可重用性水平。


我们曾尝试在我们的某个站点上使用多项目设置,但并不满意。该设置增加了大量配置支持的额外工作量。 - Dmitry Harnitski

1
当您在Sitecore的Web根目录中创建Visual Studio项目并将所有Sitecore的dll文件放置在bin目录中时,请不要忘记将所有这些文件添加到项目的引用中:
bin\ComponentArt.Web.UI.dll
bin\HtmlAgilityPack.dll
bin\ITHit.WebDAV.Server.dll
bin\Lucene.Net.dll
bin\Mvp.Xml.dll
bin\Newtonsoft.Json.dll
bin\RadEditor.Net2.dll
bin\Sitecore.Kernel.dll
bin\Sitecore.Logging.dll
bin\Sitecore.NVelocity.dll
bin\Sitecore.Zip.dll

因为当你清理项目时,你只会保留Sitecore.Kernel.dll(在大多数情况下),你将会失去bin目录中的大部分dll文件!!

也许我误解了,但是你是在建议将你的解决方案放在IIS根目录中吗?这是一个糟糕的安全实践,如果代码对公众可见,任何人都可以下载它。我为项目中所需的所有DLL使用单独的文件夹,然后在成功构建后使用MSBuild命令将这些文件复制过去,自动化了这个过程 :) - Scott Simontis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接