【问题标题】:How to make the framework and the dependent applications loosely coupled?如何让框架和依赖的应用松耦合?
【发布时间】:2012-11-22 08:30:21
【问题描述】:

我有一个具体案例,想知道best practice的处理方式。

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

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

之后,我们在框架中添加对生成的 dll 的引用。

并创建一组用户控件(每个依赖的 Web 应用程序一个)并将它们放在它自己的框架中的一个文件夹中。

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

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

如何重构我的代码以便我可以做到这一点?

最重要的是:

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

【问题讨论】:

  • 你可以使用外观模式来解决这个问题

标签: c# asp.net web-applications platform loose-coupling


【解决方案1】:

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

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

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

开发 WCF Web 服务是一个相当大的主题。如果你有兴趣,我推荐的一本书是Programming WCF Services。它为来自 .NET 背景的人提供了关于 WCF 开发的很好的介绍。

【讨论】:

    【解决方案2】:

    我完全同意 levib,但我也有一些提示:

    1. 作为 WCF 的替代品(具有疯狂的配置需求),我会推荐 ServiceStack。与 WCF 一样,它允许您以预定义对象的形式接收请求并返回响应,但无需生成代码和最少的配置。它支持各种响应格式,例如 JSON、XML、JSV 和 CSV。这使得从 f.ex 消费变得更加容易。 JavaScript 甚至移动应用程序。它甚至还有用于 Android 的 MonoTouch 和 Mono 的二进制文件!它还具有高度的可测试性和极快的速度!

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

    检查出来! :)

    【讨论】:

      【解决方案3】:

      几十年的经验告诉你:避开框架,你就没有问题要解决。

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

      在 OO 和设计方面获得一些经验和知识,您会找到无穷无尽的解决方案来解决您的技术问题,例如外观和纪念品,以及您拥有的东西,但它们并不是您真正问题的解决方案。

      另外,如果您使用的是 MS 技术,请不要为 .NET 提供的功能之外的任何东西而烦恼。坚持使用 MS 大神提供的内容,因为一旦您离题并致力于某些内部框架,您的日子就屈指可数了。

      【讨论】:

        猜你喜欢
        • 2013-05-26
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        • 1970-01-01
        相关资源
        最近更新 更多