2011-02-28 79 views
7

模块化应用程序通过模块化的应用我的意思是应用中的基本功能和数据模型可以在不修改核心应用程序代码进行扩展。与实体框架代码只和ASP.NET MVC

这是一种流行的方法,例如。开源的CRM如SugarCRM或VTiger。

这种方法可能使用领域或(从MVC的contrib便携式区域),其允许添加新的控制器和视图在单独的组件,而不会影响芯的DLL遵循在asp.net MVC应用程序。

问题出现时,一个要扩展基本应用程序的数据模型。对于模型定义集中在Edmx文件中的实体框架,在实际意义上是不可能的。这种方法不允许添加一个新的表格来引用新程序集中的一些基本模块表格。

我注意到,该果园CMS通过使用NHibernate实现了全模块化(这是告诉,因为他们有微软的支持,该项目本来是作为一个技术展示)。由于POCO方法,Nhibernate可以实现这种模块化。每个实体/表格都是在单独的文件中定义的,这显然是使用模块化应用程序的方式。

有,然而,与实体框架代码只办法,产生使用POCO定义在运行时EDMX模型中的希望。有没有人尝试过这种方法来将数据模型的定义分布在单独的可插拔项目中?

+0

你用过Code Only吗? – jfar 2011-02-28 14:26:07

+0

似乎暂时还是有限的,但这种可扩展性的可能性看起来是切换的好理由。 – aaimnr 2011-03-01 16:37:18

+0

这是很久以前问过的,但是我想知道你做了什么@deadbeef。我遇到了类似的概念问题 – MrJD 2012-09-27 04:46:21

回答

3

我已经实现了这一点使用EF代码优先和GUI扩展点的核心模块上的组合。这导致:

  • 每个模块处理作为一个独立的应用程序(除GUI)
  • 每个模块都有它自己的数据库(如代码第一滴&重新创建数据库)
  • 每个模块可能在另一个模块中复制需要的数据
  • 每个模块都是一个服务
  • 每个模块可以延长t他通过IoC容器
  • 模块可以相互沟通,通过核心扩展点 GUI或者通过异步消息(nServiceBus)和同步RPC(WCF)

请注意,这是一个企业我们为SOA设计的应用程序。使用EF Code First,如果您手动管理您的数据库(即不要删除&重新创建),您可以使用上面的一些概念并简化它。您可能需要自定义IDatabaseInitializer来支持它,但它应该是可能的。

+0

提问者是不是要求相同的数据库解决方案? – jfar 2011-02-28 17:00:28

+0

确实,我正在寻找更简单的解决方案。尽管如此,这种方法非常有趣(尽管在大多数情况下都是过度的)。 – aaimnr 2011-03-01 16:35:36