Asp.net 大型应用程序卫星部分的体系结构

Asp.net 大型应用程序卫星部分的体系结构,asp.net,architecture,Asp.net,Architecture,我在一家公司工作,该公司在美国大多数州提供某些类型的金融咨询服务。我们目前有一个相当简单的CRUD应用程序,用于管理客户机以及有关我们为每个客户执行的资产和服务的信息。它只关注所有位置共有的基本数据点和过程——最小公分母 现在,我们希望实现对跟踪不同数据点和流程的支持,这些数据点和流程因州而异,同时保留面向全国的核心系统。这样地: (来源:) 我使用的堆栈是ASP.Net和SQLServer2008。国家应用程序是一个相当简单的web表单。它的数据访问层是围绕LINQ到SQL实体和dataco

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

现在,我们希望实现对跟踪不同数据点和流程的支持,这些数据点和流程因州而异,同时保留面向全国的核心系统。这样地:
(来源:)

我使用的堆栈是ASP.Net和SQLServer2008。国家应用程序是一个相当简单的web表单。它的数据访问层是围绕LINQ到SQL实体和datacontext的存储库包装器。除了CRUD操作之外,目前几乎没有什么业务逻辑,但随着每个状态的复杂性的引入,业务逻辑会更多

那么,如何推动卫星片

  • 只要开始对功能沾沾自喜,追求一个大泥球
  • 构建一系列可重复使用数据访问层但在其他方面是独立的卫星应用程序
  • 投资(金钱和/或时间)于规则引擎(la Windows工作流),并将每个状态的唯一位隔离为单独的规则集
  • 在插件框架中投入(时间)一个la MEF,并将每个州的功能实现为一个插件
  • 别的
理想的用户体验将以单个应用程序的形式出现,该应用程序可以无缝地将其表示和流程调整到用户正在使用的任何位置。这尤其有用,因为一些用户使用多个状态的资产。所以有一场针对第二号的罢工

我没有MEF或WF方面的经验,所以我的问题在很大程度上是我的问题是否是这两个问题想要解决的类型。它们听起来都有点像是基于宣传,但最终可能会变成一个方钉圆孔

在所有情况下,每个州都会引入新的数据点,而不仅仅是新的流程,因此我可以想象数据访问层会增长以适应新表和列的添加,但我也完全支持替代方案


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

只是一个想法:无论你做什么,首先完全编码3个州(对于2,您仍然会尝试重复相同的代码,如果您决定更改设计,则会更加耗时)

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


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

只是一个想法:无论你做什么,都要先完全编码3个州(有2个州,你仍然想重复相同的代码,如果你决定改变设计,那就太费时了)

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

编辑:或者只是因为每个州都有很多完全不同的功能,而不仅仅是一些位?

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

您必须在核心应用程序和“插件”之间勾勒出一个清晰的接口,并让每个策略都实现它。然后,在运行时,当您知道用户正在处理哪个状态时,您可以实例化相应的状态策略类(可能使用),并在该类上调用通用方法,例如

IStateStrategy stateStrategy = StateSelector.GetStateStrategy("TX"); //State id from db, of course...
stateStrategy.Process(nationalData);
当然,这些策略中的每一个都应该使用现有的数据层,等等

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

从设计模式开始,它基本上允许您概述一个“占位符”,在运行时由具体类替换

您必须在核心应用程序和“插件”之间勾勒出一个清晰的接口,并让每个策略都实现它。然后,在运行时,当您知道用户正在处理哪个状态时,您可以实例化相应的状态策略类(可能使用),并在该类上调用通用方法,例如

IStateStrategy stateStrategy = StateSelector.GetStateStrategy("TX"); //State id from db, of course...
stateStrategy.Process(nationalData);
当然,这些策略中的每一个都应该使用现有的数据层,等等


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

Btw,请注意所有怀疑的thomases-这里(最后)是设计模式价值的完美示例:-)顺便说一句,请注意所有怀疑的thomases-这里(最后)是设计模式价值的完美例子:-)