gpt4 book ai didi

c# - DataAccess 项目中类的命名约定是什么?

转载 作者:太空狗 更新时间:2023-10-29 18:17:17 25 4
gpt4 key购买 nike

我通常在业务项目中按类命名为Manager.cs,如BaseManager.cs、CommentsManager.cs、ProfileManager.cs等...

如何命名 DataAccess 项目中的类?您称它为 CommentsDA、CommentsDB 还是什么?

只是好奇...顺便说一句,我正在使用 .NET C#。

最佳答案

软件层之间的命名约定

我曾经像您所问的那样为每种软件层分开类命名约定。然而在 .NET 世界中,在意识到每一层都是它自己的程序集,并且程序集通常可以替换为实现相同接口(interface)的程序集时,我发现命名空间是最重要/有效的更改,并删除了特定于类的前缀和后缀,大多数情况下。

比如我以前有Customer(业务)和CustomerDAL(数据访问层)

.. 在我最近的项目中,这经常改变,分别...

Com.Example.ProjectName.Business.CustomerCom.Example.ProjectName.Data.Customer 之间使用了一个 ICustomer 接口(interface)他们而不是直接访问目标项目中的任何特定类。

低内聚改变了类命名的重要性

通常,通过实现类后缀或前缀,您试图防​​止命名冲突紧密耦合的程序集之间

然而,通常建议通过接口(interface)实现松散耦合的程序集;副作用是您不再直接使用具体的类名。否则,通过使用紧密耦合的程序集,您还不如将它们组合成一个程序集,因为它们直接相互依赖,而单独程序集的好处就会减少。

有时我的软件采用更具描述性的方法,如 CustomerCustomerData 类,我意识到这是使用后缀,但目的是为了自然流动而不是防止命名冲突,因为我的界面无论如何都位于它们之间。

简而言之,低内聚性使得在项目的任何层中应该/可以/将相对于彼此命名哪些类的问题变得没有实际意义。并且因为您已经有单独的业务程序集和数据责任,您必须隐含地希望存在低内聚性。因此,根据问题的概念,我在应用程序设计方面的回答是客观上没有类后缀或前缀更好

C# 代码示例

为了提供一个有用的代码示例,我包含了以下 C# 框架以显示我倾向于的类命名策略(或者缺少策略可能更准确)。

注意:这个例子在某些方面是不完整的,但展示了类命名在程序集之间无关紧要的概念(即使它是相同的类名),因为它们是使用接口(interface)分开的。

Business.dll - 业务层程序集

引用 Shared.dll 程序集。

namespace Com.Examle.MyProject.Business {
using Com.Example.MyProject.Shared; // for ICustomer

class Customer {
// Reference obtained to an ICustomer implementation (not shown).
// Composition of the data customer, just for illustration purposes
ICustomer _cust;

// From business, a data access usage example:
public void GetData() {
_cust.SaveToDataSource();
}
}
}

业务正在使用 ICustomer 而不是硬连接到 Data.dll 程序集。

Shared.dll - 共享程序集 - 业务程序集和数据程序集都引用了通用类型。

// This is the only required link between business and data assemblies. 
// Business is shielded from Data concrete class names and vice-versa.
namespace Com.Example.MyProject.Shared {
public interface ICustomer {
void SaveToDataSource();
}
}

Data.dll - 数据访问层

引用 Shared.dll 程序集。

namespace Com.Example.MyProject.Data {
using Com.Example.MyProject.Shared; // for ICustomer

class Customer : ICustomer { // implement ICustomer - other assemblies can too
public void SaveToDataSource() {
// logic to save data to the data source
}
}

}

关于c# - DataAccess 项目中类的命名约定是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com