Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使框架和依赖的应用程序松散耦合?_C#_Asp.net_Web Applications_Platform_Loose Coupling - Fatal编程技术网

C# 如何使框架和依赖的应用程序松散耦合?

C# 如何使框架和依赖的应用程序松散耦合?,c#,asp.net,web-applications,platform,loose-coupling,C#,Asp.net,Web Applications,Platform,Loose Coupling,我有一个具体的案例,我想知道如何处理它 我制作了一个特定的.NET框架(web应用程序)。此web应用程序通过以下方法与许多其他web应用程序的平台或框架类似: 我们在单独的解决方案中创建依赖的web应用程序(项目业务类、rdlc报告),然后构建它们 之后,我们在框架中添加对结果dll的引用 并创建一组用户控件(每个独立的web应用程序一个),并将它们放在框架中的一个文件夹中 它工作正常,但对特定用户控件的任何修改或对任何一个相关web应用程序的任何修改都可以。我们必须再次添加引用并发布整个框架

我有一个具体的案例,我想知道如何处理它

我制作了一个特定的.NET框架(web应用程序)。此web应用程序通过以下方法与许多其他web应用程序的平台或框架类似:

我们在单独的解决方案中创建依赖的web应用程序(项目业务类、rdlc报告),然后构建它们

之后,我们在框架中添加对结果dll的引用

并创建一组用户控件(每个独立的web应用程序一个),并将它们放在框架中的一个文件夹中

它工作正常,但对特定用户控件的任何修改或对任何一个相关web应用程序的任何修改都可以。我们必须再次添加引用并发布整个框架

我想做的是使这些不同的web应用程序和框架松散耦合。因此,我可以发布一个且只有一个框架,对用户控件或不同web应用程序的任何修改只发布更新的部分,而不是整个框架

如何重构我的代码以便我可以这样做

最重要的是:


如果任何依赖应用程序中的更改,请不要发布整个框架,只发布更新的部分属于此应用程序

如果您所追求的是松耦合,那么开发“框架(web应用程序)”以作为WCF web服务。客户端应用程序将请求传递给web服务,并以预定义对象的形式接收标准响应

如果采用这种方法,我建议您实现一个附加步骤:不要在客户端代码中直接使用传递给客户端应用程序的对象。相反,在每个客户端应用程序本地创建这些web服务对象的版本,并在收到web服务响应对象后,将它们映射到本地对应对象。我倾向于在我的客户机解决方案中使用facade项目来实现这一点。facade处理对各种web服务的所有调用,并在每次调用中自动进行客户端和服务对象之间的映射。非常方便

这样做的原因是,当您决定修改web服务所服务的对象时,您只需更改客户端应用程序中的映射算法。。。每个客户端解决方案的内部代码保持不变。不要低估这可以为您节省多少工作


开发WCF web服务是一个相当大的课题。如果你感兴趣,我推荐一本书。它为那些有.NET背景的人提供了一个非常好的WCF开发介绍。

我完全同意levib的观点,但我也有一些建议:

  • 作为WCF的替代方案(有着疯狂的配置需求),我推荐。与WCF一样,它允许您以预定义对象的形式接收请求和返回响应,但无需生成代码和进行最低限度的配置。它支持各种响应格式,如JSON、XML、JSV和CSV。这使得f.ex更容易消费。JavaScript甚至移动应用程序。它甚至有用于MonoTouch和用于Android的Mono的二进制文件!它也是高度可测试和燃烧的速度快

  • 代码映射部分的一个很好的工具是,它允许您在一个地方设置所有映射,并通过调用一个简单的方法从一种对象类型映射到另一种对象类型


  • 看看他们!:)

    几十年的经验告诉我们:避免框架,你就不会有问题要解决

    框架像癌症一样进化。通往地狱的道路是由善意铺就的,而善意的一部分体现在一个框架的巨大肿瘤中,所有这些都是以潜在重用的名义出现的,而这种重用从未真正发生过

    当涉及到OO和设计时,获得一些经验和知识,你会找到解决技术问题的无休止的解决方案,比如外观、纪念品以及你所拥有的东西,但它们不是解决你真正问题的解决方案


    另一件事,如果您使用的是MS技术,那么除了.NET提供的功能之外,不要再费心了。坚持MS gods提供的服务,因为一旦你偏离主题并致力于某个内部框架,你的日子就屈指可数了。

    u可以使用facade模式来解决这个问题