模块化.Net MVC应用程序的项目设置

时间:2013-09-18 17:12:18

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

考虑一个MVC4 / EF5项目:

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

到目前为止的计划:

  • 为模型
  • 分隔dll
  • 为每个模块/功能区域分隔dll。
  • 为ViewModels分隔dll
  • 为管理员门户分隔dll
  • 为网络服务分隔dll

问题:

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

1 个答案:

答案 0 :(得分:3)

我的建议:

  • 请勿尝试使用源代码管理解决您的问题。除非你是 非常好的分支/合并和非常纪律。 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
  • 创建一个Ambient配置文件,用于定义每个租户启用的内容。将需要功能切换。特别是在开发期间尚未完成的功能
  • 找一个金丝雀 - 一个你可以与你信任的测试版合作的客户,可以提供很好的反馈
  • 为了安全起见,使用基于声明的身份 - 将其纳入MVC5。这样可以更容易地为租户提供不同的安全规则等
  • 如果您正在与多个客户合作,他们都希望与众不同 功能/或相同的功能,但实现不同,您需要获得最强大的人来收集需求。你不能做传统的Scrum并且有开发人员等直接与所有客户合作。您需要公司中的某个人充当代理产品所有者,他将承担让所有客户就一般功能达成一致的问题的所有权
  • 考虑Azure有许多我们使用过的很好的功能。轻松升级和缩小。
祝你好运