簡體   English   中英

具有分層體系結構和實體框架的類命名約定

[英]Class Naming Conventions with Layered Architecture and Entity Framework

我正在設計一個分層架構(服務/業務邏輯層,數據訪問層),並且正在努力解決一些問題。

  • 實體框架4.1不直接支持接口
  • 我的接口包含具有讀/寫屬性的其他接口的集合
    • 這意味着使用實現類也不會工作,因為它仍然會引用另一種接口類型

示例(請原諒編寫得不好的代碼,這是我腦中的臨時代碼):

數據訪問層

public interface IEmployer
{
    string Name { get; set; }
    ICollection<IEmployee> Employees { get; set; }
}

public interface IEmployee
{
    string Name { get; set; }
}

public class Employer : IEmployer
{
    public string Name { get; set; }
    public ICollection<IEmployee> Employees { get; set; }
}

public class Employee : IEmployee
{
    public string Name { get; set; }
}

public class DataManager
{
    public IEmployer GetEmployer(string name) { ... }
    public IEmployee CreateEmployeeObject(string name) { ... }

    public void Save(IEmployer employer) { ... }
    public void Save(IEmployee employee) { ... }
}

服務層

[DataContract]
public class Employee
{
    [DataMember]
    public string Name { get; set; }
}

public class HireService
{
    public void HireNewEmployee(Employee newEmployee, string employerName)
    {
        DataManager dm = new DataManager();
        IEmployer employer = dm.GetEmployer(employerName);
        IEmployee employee = dm.CreateEmployeeObject(newEmployee.Name);
        dm.Save(employee);

        employer.Employees.Add(employee);
        dm.Save(employer);
    }
}

沒有EF,上面的工作正常。 IEmployee類型用於服務層,不與Employee數據協定類型沖突。 但是,EF不能使用接口,因此我需要使用類而不是接口。

我看到幾個選項:

  • 將IEmployer / IEmployee更改為類,保留相同的名稱
  • 將IEmployer / IEmployee更改為類,重命名為EmployerDAL / EmployeeDAL
  • 將IEmployer / IEmployee更改為類,重命名為Employer / Employee,使用EmployerDL = DataLayer.Employer在使用它的任何服務類的開頭使用它

對於業務和數據層中定義的類名,我應遵循哪種命名約定?

類似的問題: DataAccess項目中類的命名約定是什么? 除了EF導致接口問題。

實際上,DAL中定義的類應該是業務層中使用的類 - 這些是您真正的域對象。 從業務層公開的類只是數據傳輸對象,因此如果要構建任何約定,則應該重新命名數據協定。

無論如何,命名約定是非常主觀的。 選擇最適合您需求的方式,並在命名方面保持一致。

暫無
暫無

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

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