我是一个初学者程序员,对于任何愚蠢行为深表歉意。

由于来自python背景,只创建了几个类的小型项目,所以大多数时候我会将所有代码都放在一个文件中。

我最近一直在学习c#,并且正在编写一个相当大的控制台应用程序(10,000行以上)。我显然不能将所有内容都放在一个文件中,但是我不确定如何将项目分成较小的部分。

到目前为止,我这样做的方法是为解决方案中的每个命名空间创建一个新项目,并将每个类相应地拆分为一个单独的文件。到目前为止,我大约有四个名称空间。我已经独立编写了每个名称空间,以期在其他项目中使用每个名称空间。

我现在处于将每个命名空间拼凑在一起以构建控制台应用程序的阶段。我该怎么做呢?

另外,我是否以正确的方式构造代码?

另外+ 1,是否可以使用位于项目中完全不同目录中的文件?

提前谢谢了。

最佳答案

以命名空间开头时,通常会使用公司或组织名称(例如,“ A”)。如果您有多个产品/项目,并且正在为该项目创建代码,则需要添加一个限定符(例如“ B”,“ C”等,因此您将拥有A.B,A.C等)。

然后,一般的方法是将相关的名称空间中的类型分组在一起。如果创建类型,并且它是解决常见问题的通用/实用程序/一次性解决方案,则需要将其保留在范围更广的命名空间中。当发现要创建许多类型以支持某些功能或目的时,您可能希望创建一个狭窄的名称空间来包含这些类型。例如,假设您需要为A.B编写几个数据访问组件,其中包含数据传输对象,数据访问对象等。然后,您可能希望将这些类型放入A.B.DataAccess之类。

但是,请记住,.NET使用OOP范例。一种OOP范例是代码重用。因此,如果您同时访问A.B和A.C中的数据,则最好创建可重复使用的数据访问组件,以鼓励在两个项目中重复使用代码。在这种情况下,您可能希望拥有一个诸如A.Common之类的项目,其中包含您的任何产品使用的通用类型,其中包含可以在A.B,A.C等中使用的通用,通用或抽象概念。

让我尝试进一步说明该示例。


项目:A.Common(程序集名称)
目的:任何项目的可重用类型
命名空间:A,A.DataAccess
类型:A.DataAccess.DataAccessObjectBase





项目:A.B(程序集名称)
目的:产品“ B”的类型
参考文献:A.Common
命名空间:A,A.B,A.B.DataAccess
类型:A.B.DataAccess.DataAccessObject(实现A.DataAccess.DataAccessObjectBase)





项目:A.C(程序集名称)
目的:产品“ C”的类型
参考:A.Common
命名空间:A,A.C,A.C.DataAccess
类型:A.C.DataAccess.DataAccessObject(实现A.DataAccess.DataAccessObjectBase)


这是一个非常简单且粗糙的示例,但是希望它将帮助您可视化程序集和名称空间之间的关系。

其他一些技巧:


除非明智,否则不要过度创建名称空间,尤其是在创建深名称空间(例如A.B.Something.SomeMoreStuff.EvenMoreStuff)时。这使您很难找到东西。
命名空间应该从更广泛的用途到更窄的用途。此外,如果您在一个狭窄的命名空间中创建类型,而该类型在很大程度上依赖于更大的命名空间中的内容,请确保将其放在该更大的命名空间下。例如A.B.布劳德


最后,您应该继续为每个源文件仅创建一种类型。

09-06 21:51