【问题标题】:Project setup for modular .Net MVC application模块化 .Net MVC 应用程序的项目设置
【发布时间】:2013-09-18 17:12:18
【问题描述】:

考虑一个 MVC4/EF5 项目:

  • 创建一个包含 3 个模块的 Web 应用程序。
  • 根据客户许可证,我们将启用或禁用 1-3 个模块。
  • 每个模块都将处理少数常用表(用户、公司等)。
  • 每个模块都将处理特定于其功能的表(PO、时间表等)
  • 一个管理员门户,管理员用户与普通用户位于一个单独的表中。
  • 使用视图模型传递给视图的数据
  • 最终会有一个 JSON 服务用于公开部分应用程序功能。
  • 此应用程序将进行多次部署,并进行轻微定制(不仅仅是启用/禁用三个模块中的每一个)。

目前的计划:

  • 模型的单独 dll
  • 为每个模块/功能区提供单独的 dll。
  • ViewModel 的单独 dll
  • 用于管理门户的单独 dll
  • Web 服务的单独 dll

问题:

  1. ViewModel 的单独 dll 有什么好处吗?
  2. 在项目组织和源代码控制方面管理同一应用程序的多个变体的提示?
  3. 是否应该有一个单独的 dll 用于身份验证(成员资格和角色提供程序)?
  4. 还有其他想法吗? (对于开放式/加载的问题,我很抱歉,也许我应该删除这个)

【问题讨论】:

  • 你的想法是正确的。另外看看 nopCommerce,他们已经实现了基于插件的开发模型,以使他们的开发和部署模块化。
  • 如果您为它们托管应用程序,可能也值得查看 FeatureFlags。如果您将功能放在它们后面,那么您可以为每个用户启用/禁用它们。
  • 看看我的问题在这里它涵盖了一些问题stackoverflow.com/questions/10428300/…
  • @sheamus 我还能做些什么来帮助解决这个问题?

标签: asp.net-mvc visual-studio design-patterns asp.net-mvc-viewmodel


【解决方案1】:

我的建议:

  • 不要试图用源代码管理解决您的问题。除非你是 非常适合分支/合并并且非常有纪律。 ID 推荐一个与 Di/IoC 拉在一起的代码库
  • DI/IoC 很多很多 - 看看Autofac and the Mutli-tenancy extra。尽可能保持松散耦合
  • 测试 - TDD,因为一切都需要松散耦合的大量测试 - 查看Autofixture/AutoMoq
  • 丰富的扩展点 - 重定向层是您的朋友 每个人都会想要不同的实现。我们的核心建筑元素 是CQRS light style - 命令、命令验证器、查询和 Domain Events
  • 让每个人都使用相同的数据库结构(除非您使用 NoSQL 等)
  • 使用Onion Architecture - 制作3个项目,Web (MVC5/WebAPI/ViewModels),基础设施(所有的技术资料 存储库实现等),领域层
  • 然后使用覆盖为每个客户创建项目 - 例如风俗 ITimeSheetCalculator 等
  • 在 Web 项目中包含 ViewModel - 查看每个租户的 ViewModel 如果需要,映射。使用AutoMapper
  • 查看诸如 VirtualPathProvider EmbeddedVirtualPath 提供程序之类的东西 这样您就可以将视图 CSS 放在客户端 DLL 中
  • 创建一个环境配置文件,定义每个租户打开的内容。将需要功能切换。尤其是在功能尚未完成的开发过程中
  • 给自己找一只金丝雀 - 一个可以与您合作开发您信任且可以提供良好反馈的测试版的客户
  • 为了安全考虑使用基于声明的身份 - 已融入 MVC5。让租户之前拥有不同的安全规则等变得更容易
  • 如果您与多个客户一起工作并且他们都想要不同的 功能/或相同功能但实施方式不同,您需要获得最强大的人来收集需求。你不能做传统的 Scrum 并让开发人员等直接与所有客户合作。您需要公司中的某个人担任代理产品负责人,负责让所有客户就一般功能达成一致的问题
  • 考虑一下 Azure 有很多我们使用过的不错的功能。轻松实现放大和缩小。

祝你好运

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2014-07-29
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多