考虑一个MVC4 / EF5项目:
- 创建一个包含3个模块的Web应用程序。
- 根据客户许可证,我们将启用或禁用1-3个模块。
- 每个模块都将处理少数常用表(用户,公司等)。
- 每个模块都将处理特定于其功能的表(PO,Timesheets等)
- 管理员门户,管理员用户在普通用户的单独表格中。
- 使用视图模型传递给视图的数据
- 最终会有一个JSON服务来公开部分应用程序功能。
- 此应用程序将进行多次部署,并进行轻微的自定义(除了启用/禁用三个模块之外)。
到目前为止的计划:
- 为模型
分隔dll
- 为每个模块/功能区域分隔dll。
- 为ViewModels分隔dll
- 为管理员门户分隔dll
- 为网络服务分隔dll
问题:
- ViewModels的单独dll获得了什么?
- 管理同一应用程序的多个变体的提示,关于项目组织和源代码管理?
- 是否应该有一个单独的dll用于身份验证(成员资格和角色提供程序)?
- 还有其他想法吗? (抱歉开放/加载的问题,也许我应该删除这个问题)
醇>
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有许多我们使用过的很好的功能。轻松升级和缩小。
祝你好运