2012-06-29 88 views
2

我正在处理我想要安装在不同业务中的应用程序。每个业务可能都需要此应用程序的不同部分。例如,应用程序具有以下模块:公司管理,任务管理和簿记管理。一家企业希望我只安装公司管理和簿记管理模块,其他人希望安装所有这三个模块。我应该拆分我的edmx吗?

这些模块(我有更多的3个)坐在一个数据库(历史原因),我不喜欢数据库的安全。此外,还有一个依赖 - 每个模块都应该知道公司的管理模式,因为它拥有所有客户,工人供应商等等的清单。除此之外,每个模块都可以视为一个安全的应用程序。

该应用程序是用C#.Net编写的,我使用的是实体框架。这里是我的解决方案的项目清单:

  1. Data文件夹
    • MyApp.Data.EF4:包含工作和库模式的单元的EDMX和实施。我正在使用POCO,因此edmx不会创建实体。仅包含对MyApp.Common的引用。
  2. 模块文件夹
    • 公共文件夹
      • MyApp.Common:包含MyApp.Data.EF4项目所有教学贯彻接口。
      • MyApp.Company.Domain:包含公司模块的域对象(PO​​CO)。这个项目没有参考任何项目。
      • MyApp.Company.Services.Contract:包含此模块公开的服务的接口。
      • MyApp.Company.Services:包含服务实现。
    • 任务文件夹
      • MyApp.Tasks.Domain:包含域对象(波苏斯)为任务模块。该项目仅引用MyApp.Company.Domain。
      • MyApp.Tasks.Services.Contract:包含此模块公开的服务的接口。
      • MyApp.Tasks.Services:包含服务实现。
    • 簿记夹
      • MyApp.Bookkeeping.Domain:包含域对象(波苏斯)为记帐模块。该项目仅引用MyApp.Company.Domain。
      • MyApp.Bookkeeping.Services.Contract:包含此模块公开的服务的接口。
      • MyApp.Tasks。服务:包含服务实现。
  3. 演示文件夹
    • MyApp.Web:网络具有所有其它模块服务,合同和域参考应用。这个特定的Web应用程序应该涵盖我所有模块的演示文稿这意味着,只有需要所有模块的企业才能获得此Web应用程序。

因为我有真正大的EDMX,让他真的很难管理,我想到了分裂EDMX使每个模块都会有自己的EDMX。这将导致MyApp.Web项目为每个模块保存工作单元(因为MyApp.Web使用所有模块,因此需要所有工作单元)。

我在想是否将edmx分割成不同的edmxs对我来说是一个好习惯。我会对任何解释进行解释,这些解释将帮助我确定这是否是一个好主意,或者对我的情况采取任何好的解决方法。

+0

我不认为将其拆分成多个edmx文件会带给你任何性能优势。我在这里看到的唯一优势是易于管理。 –

+0

@Ashshin Gh:这会伤害表现吗?我无法在一个edmx中管理大量的语句。是不可能的。 – Naor

+0

:我不知道它是否会影响性能。我认为多个EDMX文件的唯一优点是易于管理,但是在我自己的项目中,我通常从db生成EDMX,就是这样。只要数据库没有变化,EDMX就不会触及。 –

回答

0

我使用多个emdx文件,这是一个好主意。它将系统的各个部分分开,这是一件好事。

但是,您的数据库将会从多个edmx文件访问。它只是像这样结束:)在这种情况下请注意,如果您更改了数据库,那么您可能需要更新这些多个edmx文件。它不是一个阻挡者,只是一件需要注意的事情。

说了这么多,怎么样: 一)购买更多的内存(Hardware is Cheap, Programmers are Expensive B)“冻结”老EDMX并把新表到新emdx和只做增量变化

在更广泛的层面,如果你有一天没有拆分你的edmx,你的替换将会在StackOverflow中提出一个问题,它将包含下面一行:“这些模块(我有3个以上)坐在一个数据模型(edmx)中(历史原因),我不喜欢edmx。“ ;)