【问题标题】:Arranging solution files安排解决方案文件
【发布时间】:2016-07-23 01:53:34
【问题描述】:

我的 C# .NET 解决方案文件一团糟,我正试图找到一种方法来整理东西。

我试图将所有关闭的文件放在我为此目的创建的同一个文件夹中。例如,我将接口、抽象类及其继承的所有类放在同一个文件夹中。顺便说一句 - 当我这样做时,我需要编写一个指向该文件夹的“使用”语句,以便我可以在其他文件中使用这些类(我猜也是一团糟)。

  1. 有没有一种优雅的方式可以让事情变得更干净,而不是让我觉得很混乱的文件列表?
  2. (假设)打开一个抽象类文件并为从它派生的所有类添加嵌套类是个好主意吗?
  3. 有没有办法告诉解决方案在我创建的每个类上方自动设置文件夹“使用”语句?

【问题讨论】:

  • 在 C# 中,类命名空间不绑定到文件系统文件夹结构(因为包名称在 Java 中)...

标签: c#


【解决方案1】:

最好的方法是当您的解决方案文件系统结构反映您的程序架构而不是您的代码架构

例如:如果您定义了一个抽象类,并且在拥有实现它的实体之后:如果它们构成同一软件架构单元的一部分,则将它们放入同一“篮子”(解决方案文件夹)中。

在这种情况下,通过查看您的解决方案树,您可以从最顶层的角度(或多或少)了解您的架构是什么。

有不同的方法来执行代码文件系统的架构愿景、理解和感觉。例如,如果您使用一些已知的框架,例如 NHibernate 或(例如)ASP.NET MVC,则倾向于以技术所称的名称来称呼事物,这样熟悉那个的人技术可以很容易地在您的架构中找到自己。

例如WPF 强制您以某种方式在代码 中定义事物,但您还需要通过ModelModelViewView.. 的方式定义在单独的文件中直观地执行。该技术强制您以您认为的方式定义您的文件系统

顺便说一句,您所要求的主题是广为人知的难题/问题,尚未解决,因为代码只是字符序列,没有别的。

祝你好运。

【讨论】:

    【解决方案2】:

    听起来您已经到了实际需要将事情分解一下的地步,但您拒绝这样做,因为更多的文件似乎更复杂。这在一定程度上是正确的。但也有一点文件会变得很大且难以管理,如果您尝试使用嵌套类,您可能会遇到这种情况。

    将代码保存在不同的命名空间中实际上是一件好事——这就是您在文件夹中遇到的“问题”,并且必须在文件顶部添加 using 语句。命名空间允许您在逻辑上划分您的代码,甚至偶尔重用一个类名,而不会影响代码库的其他部分。

    您使用的是什么版本的 Visual Studio? Visual Studio 的一个鲜为人知的功能是它可以在您键入类名时automatically create the using directive。这将消除一个痛点。

    如果我站在你的立场上,我会开始寻找合乎逻辑的地方来将我的代码分成不同的项目。你当然也可以在这里过火,但很常见:

    • 包含您的业务逻辑和业务对象的“核心”项目。
    • 用于您构建的不同用户界面的 UI 项目,例如网站或 Windows 窗体应用程序。
    • 处理与数据库的所有交互的数据层项目。您的业​​务逻辑与数据层对话,而不是直接与数据库对话,这样以后更改数据库设置变得更加容易。

    随着代码库的增长,像 ReSharper 这样的工具开始变得非常重要。我的代码库包含大约 100 万行代码和 10 个左右的项目,如果没有 ReSharper 的转到文件导航功能,我就无法生存。它可以让您点击键盘快捷键并开始输入文件名,并在找到匹配项时跳转到它。这有点像使用 Google 查找信息,而不是尝试为您遇到的每个有趣链接添加书签。一旦我做出这种心理转变,浏览代码库就变得容易多了。

    【讨论】:

      【解决方案3】:

      尝试在同一个解决方案中使用多个项目以带来秩序。用于 Web、实体、数据访问、设置、测试等的单独项目。

      如果文件在同一个命名空间中,则不需要 using 语句。如果您要将代码分解为多个项目,则需要使用 using 语句引用其他项目。

      1. 由您决定。在逻辑上把事情分开。在您认为必要的地方使用子文件夹。
      2. 不确定。
      3. 是的,但您需要创建一个模板。搜索相关教程。

      【讨论】:

        【解决方案4】:

        1) 您的解决方案文件夹应与您的命名空间结构相匹配。 Visual Studio 设置为以这种方式工作,并将自动创建匹配的命名空间。是的,这需要一个 using 用于文件夹中的内容,但这就是它的用途。

        所以,是的,将常见的东西组合在一个适当的命名空间下。

        2) 是的,子类可能应该与它们的抽象基础或它的子文件夹位于相同的命名空间/文件夹中。我不确定你的意思是不是都在同一个文件中?如果是这样,我会说一般不会,除非它们非常非常简单。不同的文件,相同的文件夹。

        3) 我不知道。如果您在使用时右键单击类名,您可以让 Studio 自动解析它并添加 using(Ctrl + . 也这样做)

        【讨论】:

          猜你喜欢
          • 2012-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多