设置 Visual Studio 项目的 Sitecore 多站点最佳实践
Sitecore Multisite Best Practice for setting up Visual Studio Project
我正在寻求有关创建支持多站点(多租户)的 asp.net MVC visual studio 解决方案的最佳实践的建议。我们想做的一件事是尽量减少回归缺陷,这样开发人员就不会修改错误的网站代码库等。
我认为有两种方法。
方法一:
-Services (Project)
|- Site A
|-Service.cs
|- Site B
|-Serviceb.cs
|-Repository(Project)
|- Site A
|- Repository.cs
|- Site B
|- Repositorya.cs
|-MVC (Project)
|-Areas
|-Site A
|- Controller
|- View
|-Site B
|- Controller
|- View
|-Content
|-Site A
|- CSS
|- JS
|-Site A
|- CSS
|- JS
方法二
-Services.SiteA (Project)
|-Service.cs
-Services.SiteB (Project)
|-Serviceb.cs
-Repository.SiteA(Project)
|- Repository.cs
-Repository.Site B(Project)
|- Repositorya.cs
-MVC.SiteA (Project)
|- Controller
|- View
|Content
|- CSS
|- JS
-MVC.Site B
|- Controller
|- View
|Content
|- CSS
|- JS
有人可以帮我看看哪个选项更好吗?并不是说该解决方案需要支持 8 个以上的网站。
我个人的偏好是让每个人都参与同一个网站项目,因为这会迫使团队考虑他们对彼此的影响,同时还要通过重用寻找潜在的节省。
在您的结构中,您还应该考虑所有站点都可以使用的 'shared' 视图和控制器的概念。有一些简单的视图(如错误消息呈现)通常只需要对其应用不同的 CSS 即可保持品牌形象。确保您的结构支持这种类型的重用。
因此,在您提供的两个选项中,我更喜欢方法 1,并进行一些小的调整以支持共享 JS、CSS、视图和控制器。
我有另一种选择来解决这个问题。目前正在从事一个庞大的项目,有数十名开发人员和相当官僚的部署过程,我们引入了以下方法:
- 项目由多个逻辑子部分组成,实际上是独立的网站。
- 我们将这些网站中的每一个都设置为具有自己的控制器、视图等的 MVC 区域
- 最重要 - 我们将 MVC 区域设置为可单独插入的 DLL。所以每个网站都是一个正在解决的独立项目,有自己的资源和静态;在构建时,所有内容都被复制到它们所需的路径下,DLL 进入 \bin 文件夹。
- 另一个 class 共享(所有网站)资源的库,它仅被那些需要该功能的网站引用
- 在 Sitecore 中,我们有同样严格的原则 - 内容、布局、渲染尽可能高地隔离,不得重复使用任何个人内容(除非来自共享资源文件夹)。
这种方法已经为我们服务了将近一年,并且已经证明了它的敏捷性,更容易部署并且更少的代码合并冲突。如果您只在一个站点下工作 - 您不需要重新编译和重新部署所有内容 - 只需替换 bin 文件夹中的一个 dll。
因此,结合您的问题,方法 1 将是一个答案。
参考文献(更多阅读):
Sitecore MVC areas as pluggable separate DLL - making areas further more independent
我正在寻求有关创建支持多站点(多租户)的 asp.net MVC visual studio 解决方案的最佳实践的建议。我们想做的一件事是尽量减少回归缺陷,这样开发人员就不会修改错误的网站代码库等。
我认为有两种方法。
方法一:
-Services (Project)
|- Site A
|-Service.cs
|- Site B
|-Serviceb.cs
|-Repository(Project)
|- Site A
|- Repository.cs
|- Site B
|- Repositorya.cs
|-MVC (Project)
|-Areas
|-Site A
|- Controller
|- View
|-Site B
|- Controller
|- View
|-Content
|-Site A
|- CSS
|- JS
|-Site A
|- CSS
|- JS
方法二
-Services.SiteA (Project)
|-Service.cs
-Services.SiteB (Project)
|-Serviceb.cs
-Repository.SiteA(Project)
|- Repository.cs
-Repository.Site B(Project)
|- Repositorya.cs
-MVC.SiteA (Project)
|- Controller
|- View
|Content
|- CSS
|- JS
-MVC.Site B
|- Controller
|- View
|Content
|- CSS
|- JS
有人可以帮我看看哪个选项更好吗?并不是说该解决方案需要支持 8 个以上的网站。
我个人的偏好是让每个人都参与同一个网站项目,因为这会迫使团队考虑他们对彼此的影响,同时还要通过重用寻找潜在的节省。
在您的结构中,您还应该考虑所有站点都可以使用的 'shared' 视图和控制器的概念。有一些简单的视图(如错误消息呈现)通常只需要对其应用不同的 CSS 即可保持品牌形象。确保您的结构支持这种类型的重用。
因此,在您提供的两个选项中,我更喜欢方法 1,并进行一些小的调整以支持共享 JS、CSS、视图和控制器。
我有另一种选择来解决这个问题。目前正在从事一个庞大的项目,有数十名开发人员和相当官僚的部署过程,我们引入了以下方法:
- 项目由多个逻辑子部分组成,实际上是独立的网站。
- 我们将这些网站中的每一个都设置为具有自己的控制器、视图等的 MVC 区域
- 最重要 - 我们将 MVC 区域设置为可单独插入的 DLL。所以每个网站都是一个正在解决的独立项目,有自己的资源和静态;在构建时,所有内容都被复制到它们所需的路径下,DLL 进入 \bin 文件夹。
- 另一个 class 共享(所有网站)资源的库,它仅被那些需要该功能的网站引用
- 在 Sitecore 中,我们有同样严格的原则 - 内容、布局、渲染尽可能高地隔离,不得重复使用任何个人内容(除非来自共享资源文件夹)。
这种方法已经为我们服务了将近一年,并且已经证明了它的敏捷性,更容易部署并且更少的代码合并冲突。如果您只在一个站点下工作 - 您不需要重新编译和重新部署所有内容 - 只需替换 bin 文件夹中的一个 dll。
因此,结合您的问题,方法 1 将是一个答案。
参考文献(更多阅读):
Sitecore MVC areas as pluggable separate DLL - making areas further more independent