簡體   English   中英

DataAccess項目中類的命名約定是什么?

[英]What's the naming convention for classes in the DataAccess Project?

我通常將Business項目中的類命名為Manager.cs,如BaseManager.cs,CommentsManager.cs,ProfileManager.cs等...

如何在DataAccess項目中命名您的類? 你稱之為CommentsDA,CommentsDB還是什么?

好奇...... BTW,我正在使用.NET C#。

軟件層之間的命名約定

我過去常常為每種軟件層分離類命名約定,就像你要問的那樣。 然而,在.NET世界中,實現每個層是它自己的程序集,並且程序集通常可以用實現相同接口的程序集替換,我發現命名空間是最重要/有效的更改,並且刪除了類特定的前綴和后綴,在大多數情況下。

例如,我曾經有過Customer (業務)和CustomerDAL (數據訪問層)

..在我最近的項目中經常發生變化 ,分別......

Com.Example.ProjectName.Business.CustomerCom.Example.ProjectName.Data.CustomerICustomer他們之間使用的在目標項目直接訪問任何特定類的接口來代替。

低內聚力改變了類命名的重要性

通常,通過實現類后綴或前綴,您試圖防止緊密耦合的程序集之間的命名沖突。

然而,通常建議通過接口 使松散耦合的組件 ; 副作用是你不再直接使用具體的類名。 否則,通過使用緊耦合組件,您可以將它們組合成一個組件,因為它們直接相互依賴,並且單獨組件的好處會減少。

有時候我的軟件采用了更具描述性的方法,如CustomerCustomerData類,我意識到這是使用后綴,但目的是為了自然流,而不是防止命名沖突,因為我的界面無論如何都在它們之間。

簡而言之,低內聚性使得在項目的任何層中相對於彼此應該/可能/將被命名的類的問題沒有實際意義。 而且因為您已經有了用於業務和數據職責的單獨程序集,所以您必須隱含地希望存在低內聚。 因此,根據問題的概念,我在應用程序設計的上下文中的答案是沒有類后綴或前綴客觀上更好

C#代碼示例

為了一個有用的代碼示例,我將包含以下C#框架來顯示我所傾向的類命名策略(或者缺少策略可能更准確)。

注意:此示例在某些方面不完整,但顯示了類命名在程序集之間無關緊要的概念(即使它是相同的類名),因為它們是使用接口分隔的。

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
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM