草庐IT

c# - 选择 CMS、门户还是 MVC+组件?

coder 2024-05-22 原文

我需要一些帮助来确定对我的最新项目使用 CMS 还是门户解决方案是否是个好主意,该项目(目前)是一个必须为多个客户(公司或其他实体)提供服务的 ASP.NET MVC 应用程序包含用户列表)来自单个安装(即 SaaS 解决方案)。

除了核心功能,包括文档管理/发布,我还需要提供基本的社交功能(例如博客、论坛、画廊、投票等)。但是,内容必须只对其所属的客户可见,而我对一堆 CMS 和门户解决方案的评估并没有说明它们是否支持这一点。他们非常专注于单用户安装,关于如何与现有 MVC 解决方案集成的文档非常少。

本质上,我正在寻找一些指导来帮助我放弃死胡同(产品不符合要求、施加太多限制、不成熟等)并在项目走得太远之前找到未探索的选项。

我对架构的要求包括:

  • 多站点支持(使用单个域进行托管)
  • 客户之间内容的水密分离
  • 跨组件/功能的完全集成
  • SSO(单点登录)
  • 单站体验(共享页眉/页脚、统一导航、统一标签等)
  • 易于开发和部署
  • 自定义逻辑将使用 C# 和 ASP.NET MVC 编写,任何产品都应支持此
  • 我想保持控制
  • 解决方案应该提供功能,但不妨碍(例如,不要强制我使用愚蠢的习语,比如坚持使用 GUID 作为主键)
  • 活跃的开发社区
  • 无单人努力
  • 最近的源代码控制事件
  • 文档和成熟度的合理水平
  • 不一定要开源

  • 我花了大量时间评估产品和组件,我将在此简要分享:
  • Umbraco
  • 不支持 ASP.NET MVC(但是,因为有人必须以其他方式发表评论)
  • 强大的社区支持,积极发展
  • 似乎有很多工作要开始
  • Kooboo
  • 没有源事件(近两个月没有更新)
  • GPL 许可? (需要一些允许闭源应用程序的东西)
  • N2CMS
  • 部分 ASP.NET MVC 支持
  • 每个客户必须有一个单独的域
  • 有限的源事件(不死但也不活跃)
  • Orchard
  • Microsoft 赞助(这意味着它可能是过度架构、代码臃肿和缓慢,尽管它确实有一些知名且受人尊敬的贡献者/潜在客户)
  • 使用 ASP.NET MVC 构建
  • 在功能方面看起来很有希望(但在现阶段不太可能稳定)
  • AtomSite
  • 感觉相当成熟并且有不错的文档,尽管有漏洞
  • 使用 ASP.NET MVC 构建
  • 有限的源事件,单一开发者
  • MojoPortal
  • 对于门户来说看起来不错,但可能需要将自定义逻辑构建为围绕产品的模块(如果可能,我希望避免这种锁定)
  • DotNetNuke (DNN), CommunityServerMicrosoft Office SharePoint Server (苔藓)
  • 绝对不是我的那杯茶;)
  • BlogEngine.NET
  • 成熟且功能齐全
  • 不支持 ASP.NET MVC
  • 集成可能但并非没有大量的 Web.config voodoo
  • 不确定是否支持客户分离

  • 鉴于上面的列表,我倾向于 AtomSite、N2CMS、Orchard 或 BlogEngine.NET。如果我选择后者,我将使用 jitbit AspNetForum,它非常适合我的需求。

    我可能更喜欢使用自定义 ASP.NET MVC 解决方案和单个组件,因为这可能会给我最大的控制量,但另一方面,它会使站点主题化和集成更加困难。您尝试过哪些组合,哪些有效,哪些无效?我在评估中遗漏了什么重要的东西?还有其他相关建议吗?

    如果答案不仅仅是对您最喜欢的产品或做事方式的认可,而是可以帮助我选择或消除上述要求的解决方案候选者,我将不胜感激。

    最佳答案

    根据您指定的要求级别,我个人将不得不倾向于自定义方法。您可以聘请某人为您设计(查看)网站部分,或者您可以从网站设计者处从互联网上购买一个主题并根据您的喜好对其进行自定义。 (有时只是有一个地方开始就足以进行中级定制)。

  • 多站点支持(使用单个域进行托管)
  • 您可能想要控制您的托管环境,无论是 VPS(虚拟专用服务器)还是专用设备。这在共享主机上仍然是可能的,但不推荐。
  • 客户之间内容的水密分离
  • 您可能必须为每个客户创建一个独特的应用程序池,并与他们自己的服务用户 100% 分离。
  • 跨组件/功能/SSO(单点登录)/单站点体验(共享页眉/页脚、统一导航、统一标签等)的完全集成
  • 这将是棘手的部分。 This Example在开发过程中可能对您有一些有用的见解,但是您将需要一个统一的登录服务并让所有站点都使用它或链接到它。
  • 易于开发和部署
  • 这就是它变得棘手的地方。我认为开发轻松来自您的背景。在这方面,MVC 绝对是正确的选择,了解很多关于在 MVC 中构建站点的正确方法将有助于此过程。通过阅读社区博客和收听播客(如 Hanselminutes)来了解最新情况。或 DotNetRocks将帮助您与最新、最好的工具/技术保持联系,使您的网站快速有效地启动。
  • 部署 是棘手的地方。 MSDeploy 仍然不完全存在。但是,如果可以,您可能希望提出一个 Dev -> Staging -> Release 发布结构,以便您可以在 staging(模拟生产)环境中测试您的代码。
  • 自定义逻辑将使用 C# 和 MVC 编写,任何产品都应支持这一点
    我要掌控一切

  • 如果您在 ASP.NET-MVC 中开发站点,您将能够构建公共(public)库,不仅可以在站点中使用,还可以在自定义工具中使用这些库。这将大大减少您的代码重复,并有助于确保实现操作统一。 (一切都以同样的方式工作)。
  • 解决方案应该提供功能,但不妨碍(例如,不要强制我使用愚蠢的习语,比如坚持使用 GUID 作为主键)
  • 虽然在这种情况下您可以控制,但我会 强烈推荐 GUID 主键。这允许 Merge Replication ,它可以帮助您在出现问题时轻松恢复备份或使用故障转移数据库服务器。
  • 活跃的开发社区
  • .NET 有一个很棒的社区(包括这个社区),如果您礼貌地提出要求,应该会得到很多支持。
  • 无单人努力
  • 不确定您在这里的意思,除非您聘请帮助,否则您将成为单例,但即使有两个人也可以在花点时间做伟大的事情。即使一个人也可以做伟大的事情,但是你在这里运行的框架得到了一个商业资助的庞大团队的支持。
  • 最近的源代码控制事件
  • 并不真正适用于 .NET,但您可能使用的许多库(NHibernate、MVC Contrib、AutoFac 等)将有很多事件并不断得到改进。
  • 文档和成熟度的合理水平
  • .NET 和大多数为 .NET 开发的生产级库(上面提到过)实际上都有相当程度的文档。仅 .NET 就有多种付费和非付费信息来源,并且大多数库(得到社区的大力支持并在 StackOverflow 上为人所知)
  • 不一定要开源
  • 寻找 LGPL 的支持库(即您可以在商业软件中使用它,但是如果您修改库,则如果您发布二进制文件,则必须发布新的库代码。)您在这里很安全,您的站点不会如果您使用这些库来支持您的开发,则必须是开源的。

  • 嗯,那是我的 2 美分。您所描述的项目不是一件小事,即使您使用预先构建的解决方案(主要是对其进行黑客攻击以按照您想要的方式工作),您也会看到大量的工作。我想您最大的障碍是预完成解决方案的 SSO 和安全性。并不是说这是不可能的,只是很棘手,最终结果可能并不完全符合您的要求。

    另外,查看 OpenID ,它可能是将所有站点链接在一起的最佳解决方案,并且可以轻松移植大多数预建系统以使用它。

    关于c# - 选择 CMS、门户还是 MVC+组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153902/

    有关c# - 选择 CMS、门户还是 MVC+组件?的更多相关文章

    1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

      我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

    2. c# - 如何在 ruby​​ 中调用 C# dll? - 2

      如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

    3. C# 到 Ruby sha1 base64 编码 - 2

      我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

    4. ruby - Rails 3 的 RGB 颜色选择器 - 2

      状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

    5. ruby - 使用 `+=` 和 `send` 方法 - 2

      如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

    6. 基于C#实现简易绘图工具【100010177】 - 2

      C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

    7. ruby - 如何计算 Liquid 中的变量 +1 - 2

      我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

    8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

      我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

    9. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

      我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

    10. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

      我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

    随机推荐