更大应用的卫星部件的体系结构

时间:2009-06-01 22:36:54

标签: asp.net architecture

我在一家公司工作,该公司在美国大多数州提供某些类型的金融咨询服务。我们目前有一个相当简单的CRUD应用程序来管理客户以及我们为每个客户执行的资产和服务的信息。它只涉及所有地点共同的基本数据点和流程 - 最小的共同点。

现在,我们希望实现对跟踪不同国家/地区不同数据点和流程的支持,同时保留核心的面向国家的系统。像这样: NationalWithStates

我正在使用的堆栈是ASP.Net和SQL Server 2008.国家应用程序是一个相当简单的Web表单。它的数据访问层是LINQ to SQL实体和datacontext的存储库包装器。目前CRUD操作之外的业务逻辑很少,但随着每个州的复杂性的引入,会有更多的逻辑。

那么,如何阻止卫星碎片......

  • 刚刚开始对功能进行大肆宣传并追求一个泥泞的大球
  • 构建一系列重新使用数据访问层但又独立的卫星应用程序
  • 投资(资金和/或时间)在规则引擎(Windows工作流程)中,并将每个州的唯一位隔离为单独的规则集
  • 投资(时间)插件框架和MEF并将每个州的功能实现为插件
  • 其他东西

理想的用户体验将作为单个应用程序显示,无缝地将其演示和流程适应用户正在使用的任何位置。这特别有用,因为一些用户使用多个状态的资产。因此对第二号进行了罢工。

我没有使用MEF或WF的经验,所以我的问题在很大程度上是我的问题是否是我想要解决的问题类型。它们有点听起来像是基于炒作,但可能会变成圆孔的方形钉。

在所有情况下,每个州都会引入新的数据点,而不仅仅是新的流程,所以我认为数据访问层会增长以适应新表和列的添加,但我也都是替代它。

编辑:我试着想一些我可以分享的例子。有人可能会在一个州提交涉及客户资产的某些法律文件。归档的属性和工作流程与可能需要类似归档的其他州不同,所涉及的资产可能具有完全不同的属性。其他州可能根本没有可比较的申请,还有一些国家可能会有一系列不断升级的申请,需要了解该州特有的其他相关实体。

2 个答案:

答案 0 :(得分:1)

Strategy设计模式开始,它基本上允许您勾勒出“占位符”,在运行时由具体类替换。

你必须在核心应用程序和“插件”之间勾画出清晰的界面,并且每个策略都实现了这一点。然后,在运行时,当您知道用户正在处理哪个状态时,您可以实例化相应的状态策略类(可能使用factory method),并在其上调用泛型方法,例如:

之类的东西
IStateStrategy stateStrategy = StateSelector.GetStateStrategy("TX"); //State id from db, of course...
stateStrategy.Process(nationalData);

当然,这些策略中的每一个都应该使用现有的数据层等。

此解决方案的(明显)缺点是,您将对每个状态的规则进行硬编码,并且您无法在不更改代码的情况下透明地添加新规则(或新状态)。不要被愚弄,that's not a bad thing - 您的业务逻辑应该在代码中实现,即使它依赖于运行时数据。

答案 1 :(得分:0)

只是一个想法:无论你做什么,首先完全编码3个状态(2个你仍然想要重复相同的代码,如果你决定改变设计,那么它会花费太多时间)。

我必须承认我对规则或WF完全无知。但是不可能只有一个大的愚蠢的ASP.Net包含文件,其中包含与主逻辑分离的状态指令而没有任何其他语言/程序吗?

编辑:或者只是每个州都引用了很多完全不同的功能,而不仅仅是某些位?