2010-04-20 24 views
5

我总是遇到一个问题,我的Visual Studio(2008)中的项目变成了巨大的怪物,一切都通常被引入到Web应用程序项目中。我知道,从检查一些开源的东西,他们往往有一个解决方案中的多个项目,每个都有自己的责任。如何在Visual Studio中重构大型项目

有没有人有任何建议如何重构呢?什么应该在一个单独的项目与Web项目的一部分?你能指出一些关于这个问题的参考资料吗,还是仅仅是你随着时间而习惯的东西?

+3

那么首先你需要Resharper ... – cletus 2010-04-20 00:24:20

回答

4

将您的项目整洁地组织到名称空间中。命名空间不应该太大,不能太小。使每个名称空间具有公共“接口”(即一组公共类),并且不从其他名称空间访问名称空间的内部实现细节。不同的命名空间通常涉及应用程序的不同部分,例如您将拥有与UI相关的命名空间,业务逻辑,帮助器功能等。Framework Design Guidelines对如何设计命名空间有一些很好的建议。

当您觉得您的项目变得太大时,只需确定明确相互关联的一组命名空间并将它们移动到单独的项目中。由于其他名称空间已经只使用移动的名称空间的公共接口,所以将名称空间重构为新的项目只是一个文件移动操作。

+0

这很有道理。你是否试图将项目中的类文件与特定的Web项目文件分开?或者你让他们混合(同时命名空间)。是否有任何命名空间的最佳做法?对不起,我知道这是非常基本的,但我已经这么做了几年了,我终于到了沮丧的时刻。 – Aaron 2010-04-20 00:39:37

+0

FDG书是指导。一旦你确定了有意义的命名空间,尝试对它们进行平衡并将巨大的项目分割成几个较小的项目。我同意ReSharper很好,但NDepend更有用。 http://codebetter.com/blogs/patricksmacchia/archive/2008/09/23/getting-rid-of-spaghetti-code-in-the-real-world.aspx – 2010-04-20 05:56:51

2

从底层开始(最简单的类不依赖于框架以外的任何其他类),并查看是否可以将依赖关系分离为功能单元。例如,如果你有一堆相互引用的数据或业务逻辑类,但是从不引用任何UI类,那么你就有了一个可以分解到另一个项目的候选者。如果你找不到清晰的分隔点,那么你有一个设计问题,应该可能做一些重构。

我也同意使用名称空间是一个很好的开始。即使在一个项目中,您也可以通过自然地将类组合在一起的方式来隔离或最小化依赖关系。将它们放在同一个文件夹中可以强化这个分组作为一个功能单元,并且可能真的帮助那些将来需要维护代码的可怜人。相信我,我试着想想那个可怜的家伙,因为不止一次,那个可怜的家伙一直是我。编写代码的人在写他的时候和我有相同的名字,这让我感到一种小小的安慰。

1

查看guidance given by the Sharp Architecture project。它的ASP.Net MVC,但相同的原则适用于ASP.NET和其他项目。把这些东西放在一起的家伙们都是聪明我一般会将他们的建议作为默认使用,只有当我有充分的理由时才会流浪。

,他们提出的基本分层是

  • 一个核心项目为您的域对象和接口访问外部服务(包括持久性)。
  • 一个数据项目,取决于核心,实现了所有的接口访问持久
  • 应用服务项目支持应用程序级的问题,如记录或登录验证。这只是引用核心。
  • A web仅保存视图的项目。
  • A 控制器项目保存您的引导代码和协调您的web图层,域的代码。

在一个asp.net程序,我喜欢用MVP模式的情况下,这将基本上意味着

  • 网络项目握着你的WebForms和codebehinds这应该只包含最小量需要重定向到演示者的代码。您可能还需要将自举代码放在那里。这是由于一个ASP.Net的限制,你不应该从你的代码隐藏引用任何东西。
  • 控制器项目被主持人项目所取代。这里最大的区别是,主持人不得不通过WebForm实例化,而不是相反。

您还可以尝试查看ASP.NET MVP project

相关问题