Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 课堂扣球。_C#_Projects And Solutions_Directory Structure - Fatal编程技术网

C# 课堂扣球。

C# 课堂扣球。,c#,projects-and-solutions,directory-structure,C#,Projects And Solutions,Directory Structure,好的,我一直在尝试将我的一个类中的每个人放在某个根文件夹中,或者: 用户界面 业务逻辑 数据访问 BusinessObjects 接口 我还有一些不太好的地方,所以我正在寻找建议 一个缓存类,它维护一个私有字典,并允许基于某些特定键对对象进行不同的访问 事件参数类 此外,在一个项目中,我现在开始有三个子系统(数据访问、业务对象、业务逻辑)。我应该如何分解文件夹结构 A ProjectX --子系统1 ----BusinessObjects ----数据访问 ----BusinessObjects

好的,我一直在尝试将我的一个类中的每个人放在某个根文件夹中,或者:

用户界面
业务逻辑
数据访问
BusinessObjects
接口

我还有一些不太好的地方,所以我正在寻找建议

  • 一个缓存类,它维护一个私有字典,并允许基于某些特定键对对象进行不同的访问

  • 事件参数类

  • 此外,在一个项目中,我现在开始有三个子系统(数据访问、业务对象、业务逻辑)。我应该如何分解文件夹结构

    A

    ProjectX
    --子系统1
    ----BusinessObjects
    ----数据访问
    ----BusinessObjects
    --子系统2
    ----BusinessObjects
    ----数据访问
    ----BusinessObjects

    ProjectX
    --业务逻辑
    ----子系统1BL
    ----子系统2BL
    --数据访问
    ----子系统1da
    ----子系统2da
    --BusinessObjects
    ----子系统1bo
    ----子系统2bo

    ProjectX
    --业务逻辑
    --数据访问
    --BusinessObjects

    (每个功能子系统都没有子目录)

    我通常喜欢坚持1类1文件规则,但当涉及到EventArgs时,我实际上喜欢在定义委托或事件的同一文件中声明它们。除非,args被多个类层次结构使用,这在我身上并不常见

    至于缓存,我会把它放在它支持的类的文件夹中


    尽管我非常喜欢良好的组织,但人们可能会对它过于拘泥。

    没有一种正确的方法可以做到这一点

    下载一些使用类似技术的开源项目到您的项目中,并从中汲取您的想法


    对不起,我错过了C标签。优秀的.NET项目的例子在之前和之后都有介绍。

    这主要是个人喜好

    我同意Brian Genisio关于将EventArg类放在何处的观点:如果只使用一次,请将它们放在使用它们的同一文件中。对于常规类/文件,我总是有一个“常规”文件夹(多么方便!;-)


    关于文件夹结构:我会选择第二个,它是3层的,保持子系统分开。双赢

    我只想添加一条关于姓名的评论。 我觉得商业这个词会导致误用。我们这样做了,现在我们不知道它是关于什么的:域逻辑还是服务层。 我会推荐像这样的名字 域名。 Domain.Impl(将接口与Impl分开) 然后是服务……如果您使用的是ORM,可能是持久性……如果您使用的方法不同,可能会有所不同,但老实说,我对名称BusinessLogic、DataAccess和BusinessObjects感到困惑。 我不明白什么是什么。
    BusinessObjects应该包含业务逻辑,逻辑?还是仅仅是DTO?那么为什么它们与DataAccess位于一个单独的项目中呢?

    我尝试将程序集名称与它们的名称空间对齐,并使用.NET Framework本身作为指导原则。我坚信,使用驱动文件夹结构的名称空间结构可以使代码库更易于维护

    例如,我有一个缓存提供程序,它是我们使用的全局开发人员框架的一部分。它位于类似于以下内容的命名空间中:

    [Company].Core.Data.Caching

    我还有其他与数据相关的功能,这些功能在逻辑上也属于数据功能,因此缓存有适配器、转换器和生成器等同级功能。因此,假设我们有以下名称空间:

    [公司].Core.Data.Adapters
    [公司].Core.Data.Converters
    [Company].Core.Data.Caching
    [公司].Core.Data.Generators

    这些相关名称空间位于名为[Company].Core.Data的程序集中,该程序集也是项目名称。按照这种结构,在解决方案中查找内容变得非常简单。说到结构,现在我们回到它们是如何存储在磁盘上的

    项目名称是根文件夹名称。这假定我的源代码管理文件夹是本地计算机上的“C:\source control”:

    C:\Source Control\Core[公司].Core.Data\
    C:\Source Control\Core[公司].Core.Data\Adapters
    C:\Source Control\Core[公司].Core.Data\Caching
    C:\Source Control\Core[公司].Core.Data\Converters
    C:\Source Control\Core[公司].Core.Data\Generators

    因此,作为一个层次结构,它看起来像:

    [解决方案]
    --[公司].Core.Data
    ----[适配器]
    ------(适配器文件)
    ----[缓存]
    ------(缓存文件)
    ----[转换器]
    ------(转换器文件)

    我将所有项目放在同一级别,并使用文件夹改变子名称空间。这样,名称空间和物理结构很容易协调。困难的部分是找到平衡。您不希望有大量较小的程序集,因此我通常会在较高级别对它们进行分组,并最终在程序集变得过大或子名称空间比其他部分更改更频繁时对其进行重构

    我已经做了很多年了,这不仅对我自己,而且对我的开发人员来说都是非常舒适的


    至于您的EventArgs问题,我同意大家的共识,即我通常对每个文件执行一个类,但如果是单一用法,我会破例将一个EventArgs类与另一个类放在一起。对于多用途,我将它们放在程序集中的最高逻辑点,允许名称空间结构绑定我的作用域。

    BusinessObjects只是哑数据结构DataAccess是用于检索和存储数据的代码BusinessLogic是所有实际计算、逻辑等。@ak:可能是离题的,但是DDD呢?你有没有任何你认为是理想的组织智慧的例子。