【问题标题】:Organizing Projects within Solution and avoiding duplicate code在解决方案中组织项目并避免重复代码
【发布时间】:2014-08-29 19:59:34
【问题描述】:

我正在尝试通过开发一个小型应用程序来学习 VS/C#/Sql Server。我在获得我想要的结果方面取得了很大的成功(和兴奋),但在退后一步后,我意识到我正在以更线性的方式(从我的大型机背景)进行编程,而不是利用 OOP。我也发现自己在重复代码。

到目前为止,我在 VS 中的“解决方案”包括以下“项目”(我将每个项目创建为“控制台应用程序”以保持简单):

  • 项目 1:通过生成年份日期来创建主日期文件 (DB)(将每年运行)
  • 项目 2:将历史数据(从 Excel (CSV) 文件转换为 DB 的多个表)(此过程将随机运行,将在新公司注册时运行)
  • 项目 3:通过 Excel (CSV) 输入更新 DB 表(也随机运行)
  • 项目 4:为多家公司安排可用性(每周运行例行流程)

我目前的困境是双重的: 1) 我不确定如何在我的解决方案中的不同项目之间共享代码 - 对于项目 2 到 4,我正在征求用户输入公司 ID 和其他参数。如何在项目之间共享此代码?我会为“控制台输入”之类的东西创建一个类并将其引用到每个类吗? 2)我不确定我是否在项目之间正确地分配了我的任务。 - 由于这些都是独立运行的流程,因此设计它的唯一方法是将它们拆分到不同的项目中......对吗?

任何关于在 VS 环境中组织的提示都将不胜感激。

【问题讨论】:

    标签: c# visual-studio code-duplication


    【解决方案1】:

    您可以使用您的对象(实体)创建类库并在您的应用程序中重用。例如:

    1 项目:Master_Datefile_Objects = 实体和商业智能

    1.1 项目:Master_Datefile_Forms 或任何其他(控制台、服务等);

    在文件夹中将您的实体和控制您的实体的类分开。

    例如:

    文件夹:管理器(在数据库中查找您的实体和项目的所有逻辑)

    //内部只能在当前项目中访问

    internal class MyClass_Student_Manager
    {
      public MyClass_Student_Model returnStudent(int ID)
      {
        return (your_Query_In_YourDataBase(ID));
      }
    }
    

    文件夹:模型

    public class MyClass_Student_Model
    {
       public int ID {get; set;}
    
       public string name {get; set;}
    }
    

    文件夹:外观

    这个类,将访问你的管理方法

    public class myProject_Facade
    {
       public MyClass_Student_Model returnStudent(int ID)
      {
        return new MyClass_Student_Manager().returnStudent(ID);
      }
    }
    

    在您的其他项目 (Master_Datefile_Forms) 中,您可以调用引用您的项目 Master_Datefile_Objects 的外观方法。

    这是一个例子。当您想重用 MyClass_Student 和您的逻辑时,您可以将项目导入其他解决方案中。

    【讨论】:

    • 感谢 Sergio - 我将继续阅读类库。
    【解决方案2】:

    我还在学习 Visual Studio、C# 和 SQL。我发现我最喜欢的模式似乎是使用三层应用模式。

    第一层由数据层组成。它所做的只是与您的数据库或其他数据源进行交互,并使其上方的层可以使用这些数据。第二层由服务层组成。它处理业务逻辑。第三层由表示层组成,唯一目的是用户交互。

    对我有用的是创建一个解决方案,其中每一层都包含一个项目。这有助于分离关注点,并且由于每个项目都包含在同一个解决方案中,它们可以相互引用。话虽如此,对于较大的项目,我发现将相关代码分成项目中的单独文件夹很有帮助。

    希望这有帮助,这是我的第一个 Stack Overflow 答案。

    【讨论】:

    • 是的 - 这很有帮助。但是,我仍然对基础知识感到困惑。据我了解,您只能在项目中(在解决方案中)拥有一个“主”程序。正如您从我的问题中看到的那样 - 我目前有 4 个(还有更多)需要在不同时间运行的我称之为“批处理”程序(从我的遗留系统背景中遗留下来)。这是否不需要每个“项目”(在“解决方案”内)?它们都将共享类、属性和方法(?)
    • 是的,这是我大部分项目的工作方式。每个层都是它自己的项目,每个项目层都可以从下面的层继承。当我想更改一个层的实现时,这特别有用。例如,如果您想将表示层更改为基于 Web 的层,则不必考虑任何较低级别的逻辑,只需将控制台输出更改为 Web 输出即可。
    猜你喜欢
    • 2016-10-26
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多