2014-01-25 23 views
1

的我加入他们使用C#中的新项目。 我注意到,有几个DLL文件正在添加的引用为什么要使用一个DLL,而不是一类

从我的知识和我也做了电子学习,构建一个类(其中有一些方法&数据)后,生成的DLL。

现在,在一个新的项目,即刚刚转换成DLL类添加作为参考,以便在它定义的函数可以调用。

所以,现在我的问题是: 1)什么是需要的类文件转换成一个DLL文件。即使是Class文件,我仍然可以通过在代码顶部添加其名称空间来调用其中定义的函数。2)如果在添加了DLL的引用之后,我删除了项目的全部内容,只留下DLL不变(在同一个地方),就使用这个dll类仍然工作

回答

9

代码分成不同的项目(每个将创建一个单独的程序集)具有多种好处:

  • 它使您的代码结构清晰。例如,它可以将存储层与业务逻辑分开,也可以从用户界面分离。
  • 它允许再使用:两个不同的用户接口可以是指包含业务逻辑相同的组件,例如。
  • 它允许更大的封装:类只有在自己的程序集中需要可以声明为internal(这是C#中顶级类的默认值),这意味着其他程序集中的代码甚至不会知道他们。如果你的所有代码都在一个程序集中,那么所有这些类将相互“了解”。

现在选择有多少项目,有一个平衡的行为 - 我当然见过应用中,这已经太远,有很多只包含一个类组件。如果您有大量程序集,那么在项目和参考管理方面就会变得头痛。然而,也有少数组件使得它更难干净的利用这些代码。

0

除了Jon Skeets answer,我还想补充“可更新性”。对我来说,这样做有两个好处

  • 一个是,如果只有一个项目需要重建
  • 和第二,推进以“释放”可仅限于几个DLL文件,而不是一个构建时间变小主要的.exe。

第一可能无法在C#中的大问题,因为项目建设非常快,但例如切换到C++将是一个很大的冲击,因为C++代码需要很长的时间来编译。

0

Separating的好处是它可以让您在不破坏客户端代码的情况下更改内部实现。如果您决定需要将界面更改为代码,它并不能保护您,但这是另一回事。

他们可以重用他们的代码。但如果他们每次需要实现这些类时都使用类(以最好的方式复制和粘贴所有代码)

当他们使用dll而不是类时,他们可以通过更新一个或多个dll来轻松更新所有项目如果您在多个项目中使用班级,您应该修改所有项目中的所有班级。

0

我可能会补充说,一个类是一个语言结构,而一个程序集是一个部署包。 UML中已经有两个完全不同的东西。

http://en.wikipedia.org/wiki/Package_(UML)

当接近细分的解决方案的新思路,项目可能会被视为在其中放置名称空间(即文件夹)和类(即文件)“地方”。

直到你意识到一个项目最适合作为系统的体系结构分离的层(或层)的概念需要一些时间。

在对系统进行分层时,您会意识到需要解决的最关键问题是分层之间的依赖关系(可能是对项目或dll的引用)。

不能有循环,但更重要的是,你应该学习OCP(开放 - 关闭原则)和ISP(接口分离原则)和DIP固体(依赖倒置原则):

http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

在那点出现一个新问题。你怎么知道哪些类依赖于对方或者不依赖?你可以绘制类图,但是这个问题有一个概念性的方法。多年来,它成为设计系统的“实践”。该概念在把握教育目的描述:

http://en.wikipedia.org/wiki/GRASP_(object-oriented_design)

把握分层的最重要的部分是“低耦合”和“高内聚”。换句话说,你应该在层次上对功能非常相似的类进行批处理,并通过功能上彼此不太相关的分层类进行分离。

相关问题