【问题标题】:Class Naming Conventions with Layered Architecture and Entity Framework分层架构和实体框架的类命名约定
【发布时间】:2011-08-12 01:23:36
【问题描述】:

我正在设计一个分层架构(服务/业务逻辑层、数据访问层),并且正在努力解决几个问题的交集。

  • 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 更改为 classes,重命名为 Employer/Employee,在任何使用它的服务类的开头使用 EmployerDL = DataLayer.Employer

对于在业务层和数据层都定义的类名,我应该遵循什么命名约定?

与此类似的问题:What's the naming convention for classes in the DataAccess Project? 除了 EF 导致接口问题。

【问题讨论】:

    标签: wcf entity-framework naming-conventions data-access-layer n-tier-architecture


    【解决方案1】:

    实际上,您的 DAL 中定义的类应该是您的业务层中使用的类 - 这些是您真正的域对象。从您的业务层公开的类只是数据传输对象,因此如果您想建立任何约定,您应该恕我直言重命名您的数据合同。

    无论如何,命名约定是非常主观的。选择最适合您需求的方式,并在命名上保持一致。

    【讨论】:

    • 我同意 DAL 中的类与业务层中使用的类相同(在上面的示例中也是如此)。我的问题是服务公开的 DataContract 中的冲突。如果我不必直接使用 DAL 类(并且可以只使用接口),我就不会发生这种冲突。我想我会根据需要重命名任何 DTO 类,并将笨拙的命名推给服务的消费者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2012-03-04
    • 2010-10-29
    • 2014-11-12
    相关资源
    最近更新 更多