2013-04-24 68 views
2

刚刚完成我的一个项目并即将开始另一个项目。这从来没有在我的大学教过,所以我甚至不知道它是否存在。可以说,例如你有代码...c#使用不在表单中的代码来减少重复代码?

MessageBox.Show("Hi"); 

现在我知道我可以在Form1中调用它。 我也知道我可以用另一种形式叫它提供它在公共课/虚空或什么?

我的问题是,是否有一个图书馆系统,我可以添加30-40代码snippits每个做自己的工作。所以当我想更新SQL或运行计算,我只是从库中调用一个代码文件?

对不起,如果我失去了一些明显的谷歌正在逼我疯了,我知道我想问什么,只是不怎么问它!希望你明白我的问题.. 谢谢,问候..

回答

7

当然。在Visual Studio中的解决方案中,您可以添加一个类库项目并将其填入所需的所有可重用代码。然后,解决方案中的任何项目都可以通过向该项目添加项目引用来引用它。

请注意,这样的事情很容易出问题。举个例子,你的例子:

MessageBox.Show("Hi"); 

MessageBox类紧密耦合到用户界面。所以它属于的用户界面对象。 (这种情况下的形式)。这是因为如果你尝试在类库中使用它,那么你需要将用户界面库添加到该类库中,从而使它与该特定的用户界面实现更加紧密地结合。这使得类库的便携性更低,并且可重用性更低,因为它可以用只有被相同用户界面技术的项目使用。 (例如,Web项目无法使用。)

因此,您需要考虑将每个常用工具封装到自己的可重用代码中。它是否属于用户界面,业务对象,数据访问等?如果它与特定的外围技术(用户界面技术,数据访问技术等)紧密结合,那么它可能属于那里。

一种方法是拥有多个“通用工具”库。使用人为的命名方案,大型企业域解决方案可能有项目是这样的:

  • Domain.BusinessLogic(类库,通过一切引用)
  • Application.Forms.AdminPanel(窗体应用程序)
  • 应用.Forms.OperationsPanel(表单应用程序)
  • Application.Forms.Common(类库,由其他Forms应用程序引用)
  • Application.Web。PublicWebsite(Web应用程序)
  • Application.Web.Common(类库,其他Web应用程序中引用)
  • Infrastructure.DataAccess.SQLServer(类库,依赖注入到域)
  • Infrastructure.Vendor.SomeService (类库,依赖注入到域)

所以,你有一个核心业务逻辑的项目,其中包含任何的普遍到您正在使用的所有业务领域。它应该有没有依赖关系。 (不依赖于用户界面,数据库,框架等)然后你有各种技术的应用程序,其中混合类库具有应用程序耦合的通用功能。最后你还有域的其他外围,即后端依赖。这些可能是您的数据访问层,与第三方系统和服务的集成等。

由于任何给定的功能都被抽象为一个通用工具来减少重复和增加重复使用,请注意保持代码 - 低耦合,所以“常用工具”不紧密地束缚于“不常见的依赖”。业界经常会发现与代码重用的紧密耦合增加。 (请参阅Single Responsibility Principle。)因此,请谨慎行事以避免发生。

如果它服务于多个责任并且不应该混合这些责任,那么编写同一段代码(单独由按键代替“不变”,不一定以概念为目的)不会有一次固有错误。

4

听起来像你想使用静态方法。由他们做什么,并把它们放在一个静态类组的程序,.e.g

internal static class Utility 
{ 
    public static void Method1(int whatever) 
    { 
     // do stuff 
    } 

    public static void Method2(string another) 
    { 
     // do other stuff 
    } 

} 

然后,您可以那样称呼他们:

Utility.Method1(7); 
Utility.Method2("thingy"); 
+0

但是,静态方法属于一个组或创建一个新的文件,在C#项目解决方案? – 2013-04-24 22:49:50

+0

@NicholasMordecai你可以创建一个新文件,虽然没有什么能够阻止你将多个类放入一个单独的文件中,并且对于小而紧密相关的类在单个文件中是相当常见的做法(在c/C++中定义更是如此) 。 – evanmcdonnal 2013-04-24 22:52:15

+0

如果需要,可以将静态方法添加到现有类中,这取决于它是否适合该类。至于新的静态类 - 你有权将它放在现有的文件或新的文件中 - 编译器不关心,只要这个类的命名空间可以访问调用者。 – 2013-04-24 22:53:26

1

简单的解决方案是创建一个新项目并选择“类库”选项。这将创建一个编译为DLL(动态链接库)的类。任何你想要使用这个通用代码的地方都可以添加一个对程序集的引用,然后在你使用它的特定文件中,你必须为它添加一个using语句。

如果您需要打开多个项目,则可以将所有项目都放在一个解决方案中。如果右键单击该解决方案并选择下拉菜单的属性选项,则会在左侧导航栏中打开一个带有“配置属性”选项的新窗口。选择它,然后你可以指定构建依赖关系。因此,如果您有项目A和B使用项目C中的方法(类库),那么您可以将其设置为构建依赖项,这意味着无论何时构建项目A,B或解决方案作为整体,它都将首先构建项目C.

这通常是企业软件的结构;一些dll或exe是应用程序级代码,然后是许多其他构建通常由多个项目共享的代码的项目。所有这些通常都置于单一解决方案的保护下。

如果你走这条路线有更多的细节(比如你在调试时默认运行的exe),我可以更新它。在大学里你可能没有教过任何东西,但是一旦你开始了第一份工作,你很可能会看到。