3

考虑一个 MVC4/EF5 项目:

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

到目前为止的计划:

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

问题:

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

1 回答 1

3

我的建议:

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

祝你好运

于 2013-09-19T00:38:27.453 回答