我加入了一个他们使用c#的新项目。 我注意到在参考文献
中添加了几个dll根据我的知识和我所做的电子学习,在构建一个类(包含一些方法和数据)后,会生成一个DLL。
现在在一个新项目中,刚刚转换为DLL的类被添加为引用,以便可以调用其中定义的函数。
所以,现在我的问题是: 1)将类文件转换为DLL文件的需求是什么。即使它是一个类文件,我仍然可以通过在代码顶部添加其命名空间来调用其中定义的函数
2)如果在添加DLL的引用之后,我删除了项目的全部内容,只保留了dll不变(并且在同一个地方),使用此dll的类是否仍然可以工作
答案 0 :(得分:9)
将代码分成不同的项目(每个项目将创建一个单独的程序集)具有各种好处:
internal
(这是C#中顶级类的默认值),这意味着代码在其他集会中甚至不知道他们。如果您的所有代码都在一个程序集中,那么所有这些类将相互“了解”。现在选择有多少项目是平衡行为 - 我当然看到应用程序已经过多了很多太多了,许多程序集只包含一个类。如果您有大量的程序集,那么在项目和参考管理方面就会变得很麻烦。但是,如果只有少数程序集,则会更难以干净地重用该代码。
答案 1 :(得分:0)
除了Jon Skeets answer之外,我还想添加“可更新性”。对我来说,这有两个好处
第一个在C#中可能不是什么大问题,因为项目构建速度非常快,但是例如切换到C ++会产生很大影响,因为C ++代码需要很长时间才能编译。
答案 2 :(得分:0)
分离的好处是它允许您在不破坏客户端代码的情况下更改内部实现。如果您决定需要更改代码的界面,它不会保护您,但这是另一回事。
他们可以重用他们的代码。但是如果他们每次需要实现这些类时都使用类(以最好的方式复制并粘贴所有代码)
当他们使用dll代替类时,他们可以通过更新一个或多个dll轻松更新所有项目,尽管如果你在多个项目中使用类,你应该修改所有项目中的所有类。
答案 3 :(得分:0)
我可能会补充说,类是语言构造,而程序集是部署包。 在UML中,这两个完全不同。
http://en.wikipedia.org/wiki/Package_(UML)
在接近细分解决方案的新想法时,项目可能被视为放置名称空间(即文件夹)和类(即文件)的“位置”。
您需要一些时间才能意识到项目最适合层次(或层)的概念,这是系统的架构分离。
在对系统进行分层时,你会发现要解决的最关键问题是分层之间的依赖关系(这将是对项目或dll的引用)。
不能有循环但更重要的是,您应该研究SOLID的OCP(开放 - 封闭原则)和ISP(接口隔离原则)和DIP(依赖性反转原理):
http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
届时将出现一个新问题。你怎么知道哪些课程相互依赖或不相关?您可以绘制类图,但有一个概念性的方法来解决问题。多年来,它成为设计系统的“实践”。这些概念在GRASP中用于教育目的:
http://en.wikipedia.org/wiki/GRASP_(object-oriented_design)
用于分层的GRASP最重要的部分是“低耦合”和“高内聚”。换句话说,你应该在一个层中批处理功能非常相似的类,并通过功能上彼此不太相关的分层类分开。