我所说的模块化应用程序是指无需修改核心应用程序代码即可扩展基本功能和数据模型的应用程序。
这是一种流行的方法,例如。开源 CRM,例如 SugarCRM 或 VTiger。
在使用区域或(来自 MVC contrib 的可移植区域)的 ASP.NET MVC 应用程序中可以遵循这种方法,它允许在单独的程序集中添加新的控制器和视图,而不影响核心 DLL。
当想要扩展基础应用程序的数据模型时,就会出现问题。对于模型定义集中在 Edmx 文件中的实体框架来说,这在任何实际意义上都是不可能的。此方法不允许添加将引用新程序集中的某些基本模块表的新表。
我注意到,Orchard CMS 通过使用 nHibernate 实现了完全模块化(这一点很能说明问题,因为他们有 Microsoft 的支持,并且该项目旨在作为技术展示)。 Nhibernate 借助 POCO 方法实现了这种模块化。每个实体/表都在单独的文件中定义,这显然是模块化应用程序的方式。
然而,实体框架仅代码方法有希望,该方法使用 POCO 定义在运行时生成 Edmx 模型。有没有人尝试过这种方法来将数据模型的定义分发到单独的可插入项目中?
我使用 EF Code First 和核心模块上的 GUI 扩展点组合实现了这一目标。结果是:
- 每个模块是treated作为独立应用程序(GUI 除外)
- 每个模块都有它的自己的数据库(因为代码首先删除并重新创建数据库)
- 每个模块可能会在另一个模块中复制所需的数据
- 每个模块都是一个service
- 每个模块都可以通过核心扩展GUI扩展点通过 IoC 容器
- 模块可以通过以下方式相互通信异步消息传递(nServiceBus) 和同步RPC (WCF)
请注意,这是我们为 SOA 设计的企业应用程序。
使用 EF Code First,如果您手动管理数据库(即不删除和重新创建),您可以采用上面的一些概念并简化它。您可能需要定制IDatabaseInitializer支持它,但应该是可能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)