4

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

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

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

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

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

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

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

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

最重要的是:

如果任何依赖应用程序发生变化,切勿发布整个框架,只需发布​​属于该应用程序的更新部分。

4

3 回答 3

4

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

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

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

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

于 2012-11-22T08:42:46.393 回答
2

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

  1. As an alternative to WCF (with its crazy configuration needs), I would recommend ServiceStack. Like WCF it lets you receive requests and return responses in the form of predefined objects, but with NO code generation and minimal configuration. It supports all kinds of response formats, such as JSON, XML, JSV and CSV. This makes it much easier to consume from f.ex. JavaScript and even mobile apps. It even has binaries for MonoTouch and Mono for Android! It is also highly testable and blazing fast!

  2. A great tool for the mapping part of your code is AutoMapper, it lets you set up all your mappings in a single place and map from one object type to another by calling a simple method.

Check them out! :)

于 2012-11-22T09:09:26.033 回答
1

Decades of experience says: avoid the framework and you won't have a problem to solve.

Frameworks evolve like cancer. The road to hell is paved with good intentions, and a good portion of those good intentions are embodied in a colossal tumour of a framework all in the name of potential re-use that never really happens.

Get some experience and knowledge when it comes to OO and design, and you'll find endless solutions to your technical problem, such as facades, and mementos, and what have you, but they are not solutions to your real problem.

Another thing, if you are using MS technology, don't bother with anything beyond what .NET offers. Stick with what the MS gods offer because as soon as you digress and become committed to some inhouse framework, your days are numbered.

于 2012-11-26T21:36:45.070 回答