gpt4 book ai didi

asp.net-mvc - "inheriting"来自通用模板应用程序的 ASP.NET MVC 站点? ( Multi-Tenancy )

转载 作者:行者123 更新时间:2023-12-03 23:43:29 25 4
gpt4 key购买 nike

我们正在构建大约 10 个 ASP.NET MVC 站点,这些站点具有一组通用功能(以及相应的 URL、路由、 Controller 、操作和 View )。这些站点还将共享一组基本的域对象(例如用户、公司)和这些对象的基本属性(例如名称、地址等)。

但每个站点也将从基础高度定制和扩展。例如,我们面向大型上市公司的站点将在 Company 域对象上具有“子公司”和“股票代码”字段,而我们面向初创公司的站点将具有“风险投资公司”和“资金”属性。外观和感觉也会有很大差异,尽管我们试图保持 HTML 尽可能一致(模额外域对象属性的额外表单字段等)。我们还将谨慎地覆盖图像,例如,我们可以跨站点重复使用相同的按钮图形。

无论如何,我们正试图找出如何最好地分解和构建事物,以便我们可以重用尽可能多的代码和尽可能多的测试,而不会限制我们添加每个应用程序属性和改变应用程序之间 UI 的自由。

我熟悉如何处理有限自定义 Multi-Tenancy ,就像您在 StackOverflow/SuperUser/ServerFault(或 MSDN/TechNet)中找到的那样,其中 UI 略有不同,数据模型或多或少相同。但是当模型和 UI 非常不同(但继承自一个共同基础)时,我不太确定如何继续。

我不太担心操作问题,因为我们可能会在单独的应用程序域中运行每个站点并将它们托管在单独的数据库上。我更担心降低长期代码维护成本、提高敏捷性(例如,在不破坏派生应用程序的情况下轻松向基础添加新功能),以及在我们构建第二个时实现短期开发/测试成本节省,第三、第四等站点。

我正在寻找高级指导和建议,以及如何使用现代 ASP.NET MVC 实践使该指导成为现实的具体建议。

我意识到这是一个非常普遍的问题,但对于初学者来说,我正在寻找高级指导以及具体的技巧和窍门,以了解如何在 ASP.NET MVC 中应用该指导,包括以下内容:

  • 建议在 Visual Studio 项目中拆分基础/派生的位置
  • 避免 fork 的源代码控制技巧
  • 数据库模式提示(FWIW,我们的数据库都很小——每个表不到 10K 行,因此开发/测试成本比 DB perf 更重要)
  • 关于重用 Controller / View /等的提示。对应于“基本”模型属性,尤其是将 UI 重新用于诸如“新客户”表单之类的东西,这些表单将具有基本属性和派生属性的混合。

  • 有人对如何构建这样的 Multi-Tenancy 应用程序有很好的建议吗?

    最佳答案

    这就是我们所做的,它目前在大约 8 个站点上运行良好。

  • 为您的 Controller 、 View 模型、HttpApplication、路由等定义一个核心 MVC 项目。这将编译成一个 DLL 并损害您网站的大部分内容。
  • 为您的站点创建一组基本的默认 View 、脚本、图像等。这些将作为您各个站点的默认设置。
  • 每个客户端,创建您在编译为另一个 dll 的项目中需要的任何自定义 Controller 、路由等。
  • 此外,每个客户端,重新创建您想要使用的任何 View 、脚本、图像。

  • 要使上述步骤协同工作,您需要编写一点胶水。第一个胶水是自定义 View 引擎。您需要自定义标准 View 引擎以首先在客户端特定文件夹中查找 View ,然后在默认文件夹中查找。这使您可以轻松覆盖每个客户端的默认布局。

    使一切正常工作的第二种方法是让您的核心应用程序从您的客户端特定程序集中加载路由、 Controller 等。为此,我使用托管可扩展性框架 (MEF) 来公开单个 Register 方法。在我的客户端汇编代码上调用此方法会注册路由和任何其他特定于客户端的需求。

    这是我的站点文件夹结构的一般 View ,首先检查 SiteContent 的 View :
      - AppContent
    - AppContent/Static
    - AppContent/Static/Images
    - AppContent/Static/Scripts
    - AppContent/Static/Styles
    - AppContent/Views
    - AppContent/Views/Shared

    - SiteContent
    - SiteContent/Static
    - SiteContent/Static/Images
    - SiteContent/Static/Scripts
    - SiteContent/Static/Styles
    - SiteContent/Views
    - SiteContent/Views/Shared

    - web.config
    - Global.asax

    我有可以在我的 View 中使用的助手,如 SiteImage 和 AppImage。此外,我让我的每个客户端站点为其母版页使用某些特定名称,我从未在 AppContent 默认值中定义这些名称。

    我意识到这是一个粗略的概述,但它现在对我们来说已经足够好了。

    关于asp.net-mvc - "inheriting"来自通用模板应用程序的 ASP.NET MVC 站点? ( Multi-Tenancy ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1495847/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com