Visual studio 寻找有关Microsoft Visual Studio解决方案和项目命名约定的建议

Visual studio 寻找有关Microsoft Visual Studio解决方案和项目命名约定的建议,visual-studio,naming-conventions,projects-and-solutions,Visual Studio,Naming Conventions,Projects And Solutions,在如何设置解决方案、项目及其输出的程序集方面,似乎没有任何经过实践检验的最佳做法来指导您。微软似乎已经回到了VS.net时代,但他们已经退出了这一内容。对于我读到的每一种方法,我都会读到另一种声称相反的方法更好的方法,或者一篇只关注“如果微软愿意……”但实际上没有提供解决方案的帖子 似乎有很多方法可以做到这一点,所有这些方法似乎都适用于不同群体的情况,因此我想我会问你使用什么约定,以及为什么它们适用于你的情况 我希望这将为不同的情况、小型开发组和项目以及位于不同位置的大型开发组和项目提供一些好的

在如何设置解决方案、项目及其输出的程序集方面,似乎没有任何经过实践检验的最佳做法来指导您。微软似乎已经回到了VS.net时代,但他们已经退出了这一内容。对于我读到的每一种方法,我都会读到另一种声称相反的方法更好的方法,或者一篇只关注“如果微软愿意……”但实际上没有提供解决方案的帖子

似乎有很多方法可以做到这一点,所有这些方法似乎都适用于不同群体的情况,因此我想我会问你使用什么约定,以及为什么它们适用于你的情况

我希望这将为不同的情况、小型开发组和项目以及位于不同位置的大型开发组和项目提供一些好的约定

你用什么惯例来

  • 说出你的解决方案,为什么
  • 说出你的项目,为什么
  • 命名你的程序集,为什么
  • 知道何时创建新项目或添加到现有项目,以及为什么
  • 知道何时将解决方案拆分为更小的解决方案,以及为什么
  • 知道何时将一个项目分解为多个项目,以及为什么

要明确的是,在这些答案中,为什么和如何一样重要。在how here和其他地方发布了许多答案,很少有人说为什么他们使用一种约定而不是另一种约定。

在我们的例子中,我们将项目名称与我们为特定程序集选择的名称空间保持完全相同。这样就很容易在物理文件夹中映射类文件的位置。例如-
CompanyName.BusinessLine.BusinessService
CompanyName.Framework.Security
。因此,如果开发人员正在查看
CompanyName.Framework.Security.Cryptography.cs
,他可以立即找到项目并打开该项目。

这是一个非常广泛的问题,但也是一个很好的问题。我将从一个用于ASP.NETWeb项目的简单结构开始(MVC将看起来完全不同)

解决方案命名对我来说没什么大不了的。我倾向于为特定目的创建解决方案,并将现有项目添加到解决方案中。如果您的解决方案超过15个项目(只是粗略的数字),请考虑添加一些项目作为参考。大多数人不需要一次完成超过15个项目

项目命名对我来说是件大事

// class library that supports the site itself and abstracts
// more complicated UI logic into a separate place
Company.ProductName.Web;

// website
Company.ProductName.Web.UI;

// main business object library for product
//
// of course, you can have as many of these as needed.
Company.ProductName;
我尝试在项目中使用足够的文件夹,以便在不滚动解决方案资源管理器的情况下轻松查看文件夹中的所有文件

我典型的web项目看起来像这样。请注意,表示命名空间/可编译资源的大小写与不表示命名空间/可编译资源的大小写不同

  • 客户端(css、javascript)
  • 配置(专用、自定义配置文件,如果有)
  • 内容(母版页、aspx和ascx,分为逻辑文件夹)
  • 处理程序(ASHX等)
  • 图像
  • MSBuild(生成脚本)
  • WebServices(这些应该只是与所讨论的站点直接相关的小型服务。否则,将它们分解为一个单独的项目)
我已经开始越来越多地使用分部类来创建综合类,这些类可以做很多事情,而不会让代码变得混乱。例如,我最近创建了一个web服务,其唯一目的是将JSON返回给客户机,但为了更好地组织它,该逻辑分布在十几个部分类中


希望这能让你开始。

正如蒂姆所说,这是非常广泛的。需要注意的几点:

  • 解决方案通常只是一组项目。例如,许多解决方案可以包含相同的项目。因此,这并不重要:如果您不喜欢解决方案名称,您可以将其丢弃,而不进行任何重构
  • 与Pradeep一样,我倾向于使用项目包含的顶级名称空间命名项目。“更深”的名称空间最终位于子目录中,因此
    Foo.Bar.Baz
    名称空间中的类可能位于项目
    Foo.Bar
    Baz
    目录中
我倾向于分为以下几个项目:

  • 可重用元素(例如,一个用于UI的程序集,一个用于可重用的模型类集,一个用于可重用的通用工具类)
  • 部署要素(例如,一个用于生产,一个用于测试,成对)
  • 引用元素(例如,如果您有一个公共程序集
    Skeety.common
    ,其中一些接口由其他类使用,则可能有一个
    Skeety.common.Testing
    程序集,其中包含一些类型,可帮助您使用
    Skeety.common
    测试类)。这导致了以下规则:
    • 生产部件只能引用其他生产部件
    • 测试组件只能参考生产组件和其他生产组件
    • 测试组件(包含测试本身的组件)只能引用生产和测试组件,而不能引用其他测试组件
    • 显然,不允许循环引用
在许多情况下,实际上如何划分并不重要,但它确实有助于在计算依赖层时使设计更清晰(因此业务逻辑程序集不应该引用UI程序集,反之亦然)


拥有太多的项目肯定会拖慢你的进度,无论是在构建时间上还是在确定所有东西应该在哪里。项目太少会使设计不那么清晰。随着时间的推移,你可能会对事情的布局有更多的直觉——但如果我声称自己总是知道最好的做法,我会大吃一惊:)

Visual Studio“对象浏览器”使查找包含给定类的程序集变得简单,不管名称空间是否匹配,我不记得它是否告诉您ASE的位置