我正在研究为主要使用微软技术的商店建立商业SaS网站的技术。
该想法是该网站将具有可插拔模块,具有免费或付费功能。客户将能够斩断&功能之间的变化,&他们的计费会在他们这样做时自动调整。
如果我自己滚动,我会使用:
...并手动推出基于IOC的插件架构(例如,对ASP.NET MVC插件here和here进行了一些很好的讨论。)
但是在这一点上我想知道 - 以前做过这件事吗?我正在想象某种模糊的CMS式架构,内置插件,商务和娱乐。订阅的东西。所有这一切,都汇集成一个“现成的”解决方案,无论是FOSS还是商业广告。
任何人都可以推荐这样的解决方案,还是仅仅是“推动自己的”工作?我认为DotNetNuke可能值得一看,但会感谢那些在生产中用它来做这类任务的人的反馈。
编辑添加: DotNetNuke出现在continuing with WebForms上,这对我来说至少是一个很大的关闭。正如该职位上的一位评论者所说,这是一个进化的死胡同。
再次编辑:对于此项目,Silverlight 肯定是。我们需要支持各种设备,包括Android和iOS平板电脑等非微软移动设备。手机。我们确实需要一个相当丰富的UI,但我们将在Javascript中这样做。
答案 0 :(得分:1)
对于需要可插拔模块的项目,我使用了MEF(内置于.net 4.0中)。
通过使用this great code for compiling views into a dll,可以轻松地使用MEF加载其他视图和控制器,从而轻松实现可扩展性。
我对你的建议做的另一件事就是使用Linq to Entites而不是Linq to Sql。最新的代码优先版本可以非常快速地启动和运行
马丁
答案 1 :(得分:1)
我为VOIP PBX解决方案做了类似的解决方案。我自己使用nhibernate,autofac和一些自己的库制作了一切。这与正常的应用程序没有什么不同。
您需要了解的最重要的方面是所有模块都会随时加载。如果你需要一个运行良好的解决方案,你可以解决这个问题(你可以为每个客户提供一个应用程序域,但效率不是很低)。
您应该使用标准.NET CAS(代码访问安全性)解决方案来控制授权。您可以通过创建自己的IPrincipal
和IIdentity
来实现此目的。委托人应该与租户(组织)相对应,而IPrincipal
对应于用户。
我在应该属于租户的所有类/实体上使用ITenantEntity
接口(包含租户数据库ID)。它用于验证当前登录的用户是否真正有权访问所请求的实体。
最困难的是你的应用程序是多线程的(例如,如果你有一个后台线程或计时器进行一些维护)。原因是很容易忘记切换到正确的IPrincipal
,这使得所有CAS检查都搞砸了。解决这个问题的最简单方法是创建自定义Timer
和Thread
类,这些类会强制您指定IPrincipal
(或者至少可以轻松切换)。
另一种常见方法是在所有服务/存储库方法上使用tenantId参数。但这不是一个非常强大的解决方案。
答案 2 :(得分:0)
为什么有人会在“现成的”解决方案中推出这些产品? 架构的这些部分非常独立,您可以替换任何适合您需求的部分。